2013-05-01 89 views
0

我正在嘗試編寫Oracle動態SQL來進行行計數,下面是我的方法,請幫我完成。Oracle:動態SQL

這是我的選擇生成單獨計數聲明:

select 'select count(*) from '||table_name||';' 
from dba_tables 
where owner = 'URR'; 

這是我如何開始:

declare 
    l_owner varchar2(30) := 'URR'; 
    l_table_name varchar2(30); 
    l_columns varchar2(32000); 
    l_sql varchar2(32000); 
begin 
+1

閱讀[立即執行](http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm) – 2013-05-01 15:06:17

回答

2

這裏有一個簡單的例子,着眼於表中您自己的方案:

set serveroutput on 
declare 
    c number; 
begin 
    for r in (select table_name from user_tables) loop 
     execute immediate 'select count(*) from ' || r.table_name 
      into c; 
     dbms_output.put_line(r.table_name ||': '|| c); 
    end loop; 
end; 
/

要看別人的表,你需要使用dba_tables作爲你的st設計爲嘗試,或更可能的all_tables,因爲這應該排除您無法計算的表格,但您還需要在count語句中指定所有者。

通常情況下,您希望使用綁定變量來避免SQL注入,但您必須像這樣使用連接來指定對象名稱。

還有其他需要注意的是你在查詢中有一個錯誤,但是現在Egor已經從問題中刪除了。您執行的動態SQL字符串不應以分號結尾(;)。