【发布时间】:2017-02-14 02:05:46
【问题描述】:
是否有一种相当简单的方法来获取包含逗号分隔的前缀列表的输入参数并根据使用这些前缀的 select 语句返回游标?
即(伪代码)
PROCEDURE get_by_prefix(p_list_of_prefixes IN varchar2, r_csr OUT SYS_REFCURSOR)
IS
BEGIN
OPEN r_csr FOR
SELECT * FROM my_table where some_column LIKE (the_individual_fields_from p_list_of_prefixes ||'%')
END
我尝试了各种组合,现在有两个问题 - 将输入强制转换为合适的表(我认为它需要进入表类型而不是 VARCHAR2_TABLE),其次让 like 子句有效地成为从内部“伪表”中选择...
编辑:似乎人们正在建议将“IN”与一组潜在值一起使用的方法——而我正在考虑使用 LIKE。我可以使用类似的技术 - 构建动态 SQL,但想知道是否没有更优雅的方法...
【问题讨论】:
-
这不适用于 LIKE,除非我弄错了......
-
您正在尝试将
like用作In,两者都用于某些目的。如果两者相同,则不需要 2 个不同的运算符。 -
不,我不是。我试图准确地使用 LIKE 它的用途。复杂性是表示列表的动态输入。
-
将输入字符串分解为单独的标记并使用 IN 条件是最好的解决方案;使用
LIKE可以(轻松地)以您想要的方式完成,但效率会低得多。您是否有特定原因必须使用LIKE?