2013-07-29 118 views
0

嗨在from子句中有沒有辦法使用PL sql變量? 我使用下面的代碼,但我得到的錯誤在SELECT語句「表中找不到」有沒有辦法在'FROM'子句中使用PLSQL變量?

declare 
--var varchar2(20); 
cursor cur is 
    select table_name from my_tables where table_name like 'RATED%'; 
    v_rows cur%rowtype; 
--V_name varchar2(20); 
begin 
    open cur; 
    loop 
     fetch cur into v_rows; 
      exit when cur%NOTFOUND; 
      select * from v_rows.table_name; --here i am getting error. 
    end loop; 
end; 
+0

的[?是否有可能通過表名作爲Oracle參數]可能重複(http://stackoverflow.com/questions/3690038/is-it-it-it-it-it-this-a-parameter-in-oracle) – APC

+1

請問我爲什麼需要選擇語句?你不能只寫一個select語句而不立即執行。你可以分享你的問題,你想實現嗎 – Harshit

+0

是的,我被執行立即執行。 – user2629100

回答

0

您可以使用動態SQL這樣的:

excute immediate 'select * from ' || v_rows.table_name; 

請看看execute immediatedescriptionDBMS_SQL學習動態sql。

要從這些查詢中獲得結果,您必須使用顯式遊標(也在上述說明中進行了說明)。

0

不,這是不可能的。您不能使用變量作爲表或模式名稱。 您必須爲此使用本機動態SQL或DBMS_SQL。另外,你不能在PL/SQL中使用一個普通的「從* v_rows.table_name中選擇*」 - 你需要一個INTO子句(一個放置SELECT結果的「目標」)。

這裏有一個例子應該把你在正確的軌道上:

create table my_tables as select table_name as table_name from user_tables; 

declare 
    cursor cur is 
    select table_name 
     from my_tables 
     where table_name like 'RATED%'; 
    v_rows cur%rowtype; 
    v_cnt pls_integer; 
    v_SQL varchar2(4000); 
begin 
    open cur; 
    loop 
    fetch cur into v_rows; 
    exit when cur%NOTFOUND; 
    v_SQL := 'select count(*) from ' || v_rows.table_name; 
    -- debug output 
    dbms_output.put_line(v_SQL); 
    EXECUTE IMMEDIATE v_SQL INTO v_cnt; 
    dbms_output.put_line(v_rows.table_name || ' : ' || v_cnt); 
    end loop; 
end; 
+0

現在我正在使用EXECUTE IMMEDIATE'select count(*)from'|| c.table_name || '從等待中減去選擇計數(*)。「 || c.table_name INTO v_cnt; 但收到錯誤'找不到數據',有什麼解決辦法? – user2629100

+0

嘗試在調用EXECUTE IMMEDIATE之前打印SQL語句,並直接運行SQL語句 - 這應該會讓您知道出了什麼問題(我已更新了我的答案)。 –

+0

@ user2629100 - 這是一個新問題,你應該這樣發佈。 StackOverflow是一個問答網站,不是論壇。請通過正確使用該網站來尊重社區。 – APC

相關問題