我的最終目標是查詢資料庫,檢查 v$pdb 是否存在,如果存在,則查詢它。如果沒有,請繼續做其他事情。基本上我想要一個也適用于 11g 及更高版本的腳本。我真的摔倒在第一道柵欄上。我只是想讓它輸出到螢屏上。它輸出的只是“v_str”。
SET FEEDBACK OFF;
SET SERVEROUTPUT ON;
declare
v_str varchar2(200);
v_str1 varchar2(200);
begin
v_str := 'select dbid, con_id, name into v_str1 from v$pdbs';
v_str1 := q'!begin dbms_output.put_line('v_str'); end;!';
Execute immediate v_str;
begin dbms_output.put_line(v_str1);
end;
/
任何人都可以幫助我讓輸出提示螢屏......?謝謝!
uj5u.com熱心網友回復:
一點條件編譯應該在這里有所幫助
SQL> declare
2 has_container varchar2(1);
3 in_container varchar2(1);
4 begin
5 $IF DBMS_DB_VERSION.VER_LE_11_2
6 $THEN
7 has_container := 'N';
8 in_container := 'N';
9 $ELSE
10 has_container := case when to_number(sys_context('USERENV','CON_ID')) = 0 then 'N' else 'Y' end;
11 in_container := case when to_number(sys_context('USERENV','CON_ID')) > 1 then 'Y' else 'N' end;
12 $END
13 dbms_output.put_line('has_container='||has_container);
14 dbms_output.put_line('in_container='||in_container);
15
16 end;
17 /
has_container=Y
in_container=N
在這段代碼中
- has_container = 是資料庫多租戶(是/否)
- is_container = 如果資料庫是多租戶的,我當前是在 root 中還是可插入的
然后如果你想要一個串列,你可以使用游標回圈
SQL> declare
2 has_container varchar2(1);
3 in_container varchar2(1);
4 begin
5 $IF DBMS_DB_VERSION.VER_LE_11_2
6 $THEN
7 has_container := 'N';
8 in_container := 'N';
9 $ELSE
10 has_container := case when to_number(sys_context('USERENV','CON_ID')) = 0 then 'N' else 'Y' end;
11 in_container := case when to_number(sys_context('USERENV','CON_ID')) > 1 then 'Y' else 'N' end;
12 if has_container = 'Y' and in_container = 'N' then
13 for i in ( select name from v$pdbs )
14 loop
15 dbms_output.put_line(i.name);
16 end loop;
17 end if;
18 $END
19 dbms_output.put_line('has_container='||has_container);
20 dbms_output.put_line('in_container='||in_container);
21
22 end;
23 /
PDB$SEED
PDB1
PDB2
has_container=Y
in_container=N
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/369925.html
標籤:甲骨文
上一篇:使用變數時缺少右括號錯誤
