gpt4 book ai didi

oracle - sqlplus - 在 "IN"子句中使用绑定(bind)变量

转载 作者:行者123 更新时间:2023-12-01 23:11:26 25 4
gpt4 key购买 nike

我在 PL/SQL block 中设置了一个绑定(bind)变量,并尝试在另一个查询的 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”列表中的绑定(bind)变量的查询中收到错误(ORA-01722:无效编号)。

打印语句产生 '123','345' 这是我所期望的。

是否可以像这样使用绑定(bind)变量,还是应该尝试不同的方法?

(使用 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;

关于oracle - sqlplus - 在 "IN"子句中使用绑定(bind)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com