oracle - oracle将存储过程的字符串参数转换为数字数组
问题描述
我正在编写一个需要带有数字数组的 WHERE IN 子句的存储过程。如何将这个数字数组传递给 SP。我的想法是发送一个像'123,234,345'这样的字符串,然后在使用它之前在SP中解析它。这是一个好方法吗?如果是,我怎样才能使下面的代码工作?
CREATE OR REPLACE PROCEDURE sp_test2
(
ids in varchar2,
cursor_ OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN cursor_ FOR
SELECT *FROM my_table
WHERE my_table.ID IN (
SELECT regexp_substr(ids,'[^:]+', 1, level) AS list FROM dual
CONNECT BY regexp_substr(ids, '[^:]+', 1, level) IS NOT NULL);
END;
/
例如(而不是转换代码)当这样使用时: IN(ids) i get ORA-01722: invalid number error
解决方案
我真的不想让事情复杂化
如果您可以简单地将一串以逗号分隔的数字作为参数传递并在之后将其拆分,那么您可以这样做:
SELECT *FROM my_table
WHERE my_table.ID IN (
SELECT regexp_substr(ids,'[^,]+', 1, level) AS list FROM dual
CONNECT BY regexp_substr(ids, '[^,]+', 1, level) IS NOT NULL);
但是,我不认为使用集合会使事情变得过于复杂。
推荐阅读
- google-cloud-platform - 谷歌云机器网络重启刷新iptables
- swift - 如何从 Int 设置 UIColor?
- logging - Solr:修改dih请求的日志
- html - 让 iOS 的 VoiceOver 忽略 HTML 页面上的元素?
- php - PHP 不断为 Telegram userbot 运行
- c# - 如何在 ASP.NET Core Webapi 中添加身份角色
- java - 使用角色进行 Spring Boot REST 控制器测试
- gluon - 字体大小不适用于列表磁贴中的主要文本
- time-complexity - 使用大 O 表示法的复杂性描述有效形式
- c# - 通过 POST 从 View 发送里面有其他 complexObject[] 的 complexObj