【问题标题】:Oracle : passing dynamic string in query through stored procedureOracle:通过存储过程在查询中传递动态字符串
【发布时间】:2017-04-03 22:31:19
【问题描述】:

如果我执行下面的查询,它会给我 4 条正确的记录。

select SUBSCRIBER_NUM, SUBSCRIBER_STATUS, P_ID
from C_S_FORWARD_INFO
where SUBSCRIBER_NUM IN ('0', '07', '070', '0705', '07052', '070526', '0705262', '07052620') and
      SCP_VER = 1

但是当我在下面执行时,它给了我 0 条记录。实际上我必须在查询的“IN”部分动态传递值。

我在下面尝试过(VAR_CALLING_NUM = 07052620):

while var1<=len LOOP 
temp1 := SUBSTR(VAR_CALLING_NUM, 1, var1); 
temp1 := concat('''',temp1); 
temp1 := concat(temp1,''''); 
temp6 := temp6 || temp1 || ',' ; 
var1:=var1+1; 
END LOOP; 
temp6 := SUBSTR(temp6, 1,length(temp6)-1);

select SUBSCRIBER_NUM, SUBSCRIBER_STATUS, P_ID from C_S_FORWARD_INFO where SUBSCRIBER_NUM IN ( temp6 ) and SCP_VER = 1 order by length(subscriber_num) desc; 

为什么给我 0 条记录。通过在SUBSCRIBER_NUM IN ( temp6 )之类的查询中传递temp6,我做错了什么吗

【问题讨论】:

  • 你有一个循环代码,所以它是 PL/SQL。在 PL/SQL 中,您可以选择某些变量,而不仅仅是选择。您能否发布完整的代码,或者只是描述您想在 PL/SQL 中做什么?

标签: sql oracle stored-procedures oracle11g


【解决方案1】:

你有一个看起来像"'0', '07', . . ." 的字符串。这是一个字符串。 in 不会将其解释为多个值。

您将需要使用动态 SQL 将其作为列表放入。这需要构造 SQL,然后使用execute immediate

【讨论】:

  • 感谢您的评论。实际上我有一个调用存储过程的java代码。现在存储过程这么大,我在这里只展示了它的一部分。你能告诉我我该怎么做吗?
  • 是否可以在变量中存储单独的值。像 a1='07', a2='070', a3='0705', a4='07052' 并从 C_S_FORWARD_INFO 中选择 SUBSCRIBER_NUM, SUBSCRIBER_STATUS, P_ID 其中 SUBSCRIBER_NUM IN (a1, a2, a3, a4, a5, a6, a7, a8) 和 SCP_VER = 1 order by length(subscriber_num) desc;
  • 请求您的帮助,先生
  • @VJS 。 . .是的,您可以将IN 列表中的每个项目作为单独的参数。
  • 感谢您的帮助。
猜你喜欢
  • 2014-04-16
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2013-06-12
相关资源
最近更新 更多