我正在嘗試在 Oracle 中撰寫查詢。我想確保它使用正確的模式,所以我認為下面的代碼可以解決我的問題。我猜語法是錯誤的。
你能修好嗎?
DECLARE
v_current_schema varchar2(30);
BEGIN
v_current_schema := SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA');
IF V_CURRENT_SCHEMA <> '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 <determinant><double quote delimited specifier>
<connection variable> << continue close current delete fetch lock
insert open undo savepoint set sql execute save merge for all clear pipe json_exists
json_value json_query json_object json_array
Symbol "update", select "ALTER" to continue.
uj5u.com熱心網友回復:
兩件事情
DDL命令必須始終execute immediate在 PL/SQL 中運行。- 您根本不需要變數,因為您可以
sys_context直接在if-then陳述句中使用。
代碼簡化
declare
begin
if sys_context('USERENV', 'CURRENT_SCHEMA') <> 'PRODUCTION'
then
execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = PRODUCTION ' ;
end if;
end;
uj5u.com熱心網友回復:
您應該使用動態 SQL:
declare
v_current_schema varchar2(30);
begin
v_current_schema := sys_context('USERENV', 'CURRENT_SCHEMA');
if v_current_schema <> 'PRODUCTION' then
execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = PRODUCTION' ;
end if ;
end;
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333119.html
上一篇:使用CHARINDEX查找字串
下一篇:Oracle將一個程序重寫為泛型
