Oracle

PL/SQL 塊執行而不列印任何輸出

  • December 3, 2015

我正在嘗試使用 dbms_output 執行 pl/sql 塊以獲取控制台輸出,但 SQL 開發人員的唯一答案是“匿名塊已完成”。

declare
   v_count integer;
   lines dbms_output.chararr;
   num_lines number;
begin
   dbms_output.ENABLE;
   num_lines := 0;

   for r in (select table_name, owner from all_tables
             where owner = 'SYSAME'
             and table_name like 'SYZ%'
             and table_name not in (select distinct table_name from all_tab_columns
                                     where OWNER = 'SYSAME'
                                     and table_name like '%SYZ%'
                                     and column_name not like '%FL_IDE_FILIALE%')) 

   loop
       execute immediate 'select count(*) from ' || r.table_name || ' where fl_ide_filiale = 12' 
           into v_count;
       dbms_output.Put_line(r.table_name ||';'|| r.owner ||';'|| v_count ||';'|| SYSDATE );    
       num_lines := num_lines + 1; 
   end loop;

   dbms_output.get_lines(lines, num_lines);
   dbms_output.Put_line(num_lines);

   FOR i IN 1..num_lines LOOP
     dbms_output.Put_line(lines(i));
   END LOOP; 

end;

知道為什麼我沒有獲得任何輸出嗎?

**Q2:**有沒有辦法不使用字元串線和類似表格的方式繪製輸出。在這種情況下,類似於具有此值的選擇: r.table_name, r.owner, v_count, SYSDATE

回答問題2:

在 PL-SQL 中建構匿名塊時,無法像 Sql Server 一樣顯示結果。您必須使用過程或函式來完成。ps:函式必須返回一個 sys_refcursor。

但是,嘿,我有類似的問題……我為這個案例所做的是創建一個儲存過程來傳遞一串值並使用簡單的數學和繪圖技術將其顯示為表格。(我沒有儲存過程,這是我以前的工作)

您必須SET SERVEROUTPUT ON在執行 PL/SQL 腳本之前執行。

引用自:https://dba.stackexchange.com/questions/122794