В документации сказано, что
execute immediate 'alter session set container=myPDB'
отключено для PDB (возможно, из CDB Root, а также для контейнера приложений),
, но ничего не говорит о СУБД_ SQL. PARSE. Я ожидал, что он сможет выполнить PL / SQL из PDB в другой PDB через DBMS_ SQL .PARSE, но получил ошибку: ORA-01031: недостаточно привилегий
Итак, Похоже, это тоже невозможно. Тест состоит в следующем
Я вхожу в систему CDB Root как SYSDBA.
Затем я могу выполнить следующее:
declare
c1 int;
rowsn integer;
statem varchar2(500);
ctx varchar2(128);
BEGIN
c1 := DBMS_SQL.OPEN_CURSOR;
ctx :='myPDB';
statem :=' declare
var1 varchar2(60);
begin
select user into var1 from dual;
end;';
DBMS_SQL.PARSE(c => c1 ,
statement => statem,
language_flag => DBMS_SQL.NATIVE,
container => ctx);
rowsn:=DBMS_SQL.EXECUTE(c=>c1);
DBMS_SQL.CLOSE_CURSOR(c=>c1);
END;
/
, и это работает!
но как только я переключаюсь на PDB как
alter session set container=myPDB;
, я больше не могу делать следующие
alter session set container=myPDB;
declare
c1 int;
rowsn integer;
statem varchar2(500);
ctx varchar2(128);
BEGIN
c1 := DBMS_SQL.OPEN_CURSOR;
ctx :='myPDB2';
statem :=' declare
var1 varchar2(60);
begin
select user into var1 from dual;
end;';
DBMS_SQL.PARSE(c => c1 ,
statement => statem,
language_flag => DBMS_SQL.NATIVE,
container => ctx);
rowsn:=DBMS_SQL.EXECUTE(c=>c1);
DBMS_SQL.CLOSE_CURSOR(c=>c1);
END;
/
любую возможность для выполнения PL / SQL из PDB, внутри другой PDB, через DBMS_ SQL .PARSE?