本文介紹了Sqlplus-在&;Quot;子句中使用綁定變量的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我在一個PL/SQL塊中設置一個綁定變量,并嘗試在另一個查詢的IN表達式中使用它。大概是這樣的:
variable x varchar2(255)
declare
x varchar2(100);
begin
for r in (select id from other_table where abc in ('&val1','&val2','&val3') ) loop
x := x||''''||r.id||''',';
end loop;
--get rid of the trailing ','
x:= substr(x,1,length(x)-1);
select x into :bind_var from dual;
end;
/
print :bind_var;
select *
from some_table
where id in (:bind_var);
我在嘗試使用”IN”列表中的綁定變量的查詢上收到錯誤(ORA-01722:無效數字)。
print語句產生'123','345'
,這正是我所期望的。
是否可以像這樣使用綁定變量,或者我是否應該嘗試其他方法?
(使用Oracle 10g)
澄清:
這是一種和解的事情。我想跑步
select *
from some_table
where id in (select id from other_table where abc in ('&val1','&val2','&val3'))
在腳本的主要部分(這里沒有圖示)之前刪除了一大堆記錄。之后我想再次運行它,以驗證some_table
中的記錄未被刪除。但是,other_table
中的數據確實會被此過程刪除,因此我不能只引用other_table
中的數據,因為那里什么都沒有。我需要一種方法來保留other_table.id
值,以便以后可以驗證父記錄。
推薦答案
我會將other_table.id
存儲在一個PL/SQL表中,然后在查詢中引用該表:
type t_id_table is table OF other_table.id%type index by binary_integer;
v_table t_id_table;
-- fill the table
select id
bulk collect into v_table
from other_table
where abc in ('&val1','&val2','&val3');
-- then at a later stage...
select *
from some_table st
, table(cast(v_table AS t_id_table)) idt
where st.id = idt.id;
這篇關于Sqlplus-在&;Quot;子句中使用綁定變量的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,