Как проверить текущие схемы и изменить схему по умолчанию в PL/SQL?

#oracle #plsql

Вопрос:

Я пытаюсь писать запросы в Oracle. Я хотел убедиться, что он работает с правильной схемой, поэтому я подумал, что приведенный ниже код решит мою проблему. Я думаю, синтаксис неправильный.

Не могли бы вы это исправить?

 DECLARE  v_current_schema varchar2(30); BEGIN  v_current_schema := SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA');  IF V_CURRENT_SCHEMA lt;gt; 'PRODUCTION' THEN  ALTER SESSION SET CURRENT_SCHEMA = "PRODUCTION" ;  END IF; END;   

 ORA-06550: row 6, column 13:PLS-00103: Encountered symbol "ALTER", expected one of the following:( start report status go to exit if loop mod empty pragma remove back select update while with lt;determinantgt;  

Комментарии:

1. В PL/SQL нет alter ключевого слова. Однако я не уверен, почему вы не можете просто выдать alter session его непосредственно в командной строке. Почему вам нужно сначала узнать текущую схему?

Ответ №1:

Две вещи

  • DDL команды должны всегда выполняться execute immediate в PL/SQL.
  • Вам вообще не нужна переменная, так как вы можете использовать sys_context ее непосредственно внутри if-then оператора.

Упрощенный код

 declare begin  if sys_context('USERENV', 'CURRENT_SCHEMA') lt;gt; 'PRODUCTION'   then  execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = PRODUCTION ' ;  end if; end;   

Ответ №2:

Это динамический SQL, который вы должны использовать:

 declare v_current_schema varchar2(30); begin  v_current_schema := sys_context('USERENV', 'CURRENT_SCHEMA');  if v_current_schema lt;gt; 'PRODUCTION' then  execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = PRODUCTION' ;  end if ;  end;  /