如何在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;