2013-01-22 70 views
0

有沒有辦法將查詢存儲在對象中,以便您可以在遊標中使用它或作爲較大查詢的子查詢?所有這些沒有使用立即執行?將sql查詢存儲在對象上

讓supose你想這樣的:

set serveroutput on; 
DECLARE 
    CNT NUMBER; 
    v1 varchar2(4000); 
    SQL_QUERY view := SELECT table_name FROM USER_TABLES; 
    CURSOR C1 IS 
    SQL_QUERY; 
BEGIN 
    OPEN C1; 
    FETCH C1 INTO V1; 
    dbms_output.put_line('name of the first table: '||v1); 
    CLOSE C1; 
    SELECT COUNT(*) INTO CNT FROM SQL_QUERY; 
    dbms_output.put_line('Count: '|| cnt); 
end; 

這可能嗎?

回答

0

「存儲在一個對象的查詢」

這是一個視圖的定義。

create view foo as select table_name from user_tables; 

然後

DECLARE 
    CNT NUMBER; 
    v1 varchar2(4000); 
    CURSOR C1 IS 
    select * from foo; 
BEGIN 
    OPEN C1; 
    FETCH C1 INTO V1; 
    dbms_output.put_line('name of the first table: '||v1); 
    CLOSE C1; 
    SELECT COUNT(*) INTO CNT FROM (select null from foo); 
    dbms_output.put_line('Count: '|| cnt); 
end; 

是不是你想要的?

+0

不是,我想要一種方法來定義一個查詢,我可以使用它來封裝另一個查詢或在遊標中使用它。 – JGS

+0

@JGS,然後你必須使用動態SQL,這是REF CURSOR或EXECUTE_IMMEDIATE等... – Art