我在Oracle中编写了以下PL/SQL代码:
declare
l_today date := sysdate;
company varchar2(30):='info';
howmany INTEGER;
params varchar2(10000):= 'color-1,color-2';
begin
select count(*) into howmany from toys where colour
IN (
'color-1'
);
dbms_output.put_line (howmany);
dbms_output.put_line (params);
exception when others then
dbms_output.put_line(sqlerrm);
end;
我想通过在变量中指定IN子句的列表开始使begin中的select子句动态化。在上面的params中是一个逗号分隔的字符串,我想在params中做。我尝试了一些方法,但无法实现它。看起来没有简单的方法来做到这一点。
是否有其他方法可以实现这一目标?
我尝试使用一些split和in_list函数,但它们都给出了错误。
我想使用这个功能,我有一个20个字符串的列表要使用。我可以把它们硬编码到in-clause中,或者制作一个变量,然后使用它。
2条答案
按热度按时间hi3rlvi21#
使用您最喜欢的csv-to-rows conversion方法将列表转换为一系列行。然后检查列是
in
这些行例如:
eqoofvh92#
您可以匹配子字符串(包括周围的分隔符,以便匹配完整的术语):
也可以创建集合数据类型:
然后在过滤器中使用它:
OTHERS
被认为是不好的做法,因为它会隐藏所有异常。更好的做法是捕获您预期会引发的特定异常,然后意外的异常将导致代码失败并可以调试。*fiddle