select servid into aa from tablea a where a.id='111';
aa查出來是'222'
select * from tableb b where b.id=aa; --執行報錯
若select * from tableb b where b.id=‘222’;--執行成功
請問要如何實作
select * from tableb b where b.id=aa;
要分開寫,不要寫在一個陳述句內實作,譬如下面這樣
select * from tableb b where b.id in (select servid from tablea a where a.id='111')
uj5u.com熱心網友回復:
select servid into aa from tablea a where a.id='111';select * from tableb b where b.id=aa; --執行報錯
這兩個陳述句,只能出現在 程序 、函式中 或匿名塊中。
第二個陳述句,你查詢完以后,要做什么 操作呢 ?
uj5u.com熱心網友回復:
select servid into aa from tablea a where a.id='111'; 這個是舉例,這樣執行沒問題select * from tableb b where b.id=aa; --執行報錯 ,目前要根據aa的值做查詢,aa是變數就無法實作,aa是‘111’就可以執行
uj5u.com熱心網友回復:
aa 是一個變數,查詢陳述句中要用到變數的,必須把這個查詢和變數的定義,放在 函式、程序、匿名塊中,不能簡單的分兩行寫;uj5u.com熱心網友回復:
這個需要動態sql吧。可以這樣,第二個查詢的結果可以用游標逐行處理
DECLARE
AA TABLEA.SERVID%TYPE;
V_SQLSTMT VARCHAR2(300);
BEGIN
SELECT SERVID INTO AA FROM TABLEA A WHERE A.ID = '111';
V_SQLSTMT := 'SELECT * FROM tableb b WHERE b.id=:aa';
EXECUTE IMMEDIATE V_SQLSTMT
USING AA;
END;
uj5u.com熱心網友回復:
oracle的存盤程序不能用select 回傳結果集的吧?oracle的存盤程序不是只能用select into嗎= =或者用游標遍歷來輸出所有的結果集
4L用動態SQL陳述句可以編譯成功但是并不會輸出任何結果,只是會提示程序已成功完成,想輸出結果還是得用游標。
uj5u.com熱心網友回復:
而且要注意,execute immediate只能處理單行查詢,多行查詢只能用游標。但是在execute immediate 加上bulk collect into的話可以批量系結來處理多行查詢。
uj5u.com熱心網友回復:
不知道以后驗證uj5u.com熱心網友回復:
我們注意到,能過在sp_executesql這個存盤程序中執行@sql引數,并重新定義@count引數,并使用@sql之外的引數@count進行輸出,就能很好的處理引數傳入的問題。uj5u.com熱心網友回復:
寫法沒問題,只是后面的查詢需要搞個游標,不然會報回傳多條的錯誤轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96345.html
標籤:開發
