如何在PL/SQL中查看当前模式并更改默认模式?
How to check the current schemas and change the default schema in PL/SQL?
我正在尝试在 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>
它是动态的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;
/
两件事
DDL
命令必须 运行 始终由 execute immediate
在 PL/SQL.
- 您根本不需要变量,因为您可以直接在
if-then
语句中使用 sys_context
。
代码简化
declare
begin
if sys_context('USERENV', 'CURRENT_SCHEMA') <> 'PRODUCTION'
then
execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = PRODUCTION ' ;
end if;
end;
我正在尝试在 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>
它是动态的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;
/
两件事
DDL
命令必须 运行 始终由execute immediate
在 PL/SQL.- 您根本不需要变量,因为您可以直接在
if-then
语句中使用sys_context
。
代码简化
declare
begin
if sys_context('USERENV', 'CURRENT_SCHEMA') <> 'PRODUCTION'
then
execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = PRODUCTION ' ;
end if;
end;