我有以下 Oracle 查询来返回书名列表。
Select bookName From Books
Where bookName = "A"
OR bookName = "B"
OR bookName = "C"
我的想法:
与其重复OR bookName = "blah",不如让它简单到只有一行语句但逻辑相同。
首先,使用以下值创建一个bookName.txt
然后在SQL语句中,把这本书名作为参数,
Select bookName From Books
Where bookName= "$values"
我不确定我们是否可以通过这种方式实现它。我想这样做的原因是我有数百个书名,我不希望sql语句超长。有人可以给我指明方向吗?
如果值的数量有限,您可以使用 IN。您的示例如下所示:
Select bookName From Books
Where bookName in ('A','B','C');
如果您想使用绑定变量并最多选择 10 本书(这里的限制很重要,并且数量不能很大),您可以使用以下内容:
Select bookName From Books
Where bookName in (:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10);
在这种情况下,您绑定前 N 个参数以设置已知值,其余参数等于 NULL。
如果需要不限制输入值的数量,则可以使用临时表;用简单的插入预先填充它,然后在你的 sql 中使用它。
-- create once your temp table. It is not part of your PL/SQL code.
create global temporary table tmp$books(book_name);
-- in your procedure calling sql prepopulate temp table with values:
LOOP
-- looping through your values
insert into tmp$books values(:p);
END LOOP;
Select b.bookName
From Books b
inner join tmp$books t
on b.book_name = t.book_name
;
最后提交/回滚以删除所有临时值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句