【发布时间】:2017-12-01 14:08:59
【问题描述】:
我有这样的存储过程:
调用 packagename.StoredProc('''A'',''B''')
'A', 'B' 部分意味着在 IN 子句的过程代码中用作参数。
当我使用 in 子句作为 paramvalue IN ('A', 'B') 运行该代码时,它会按预期返回行。
但是当调用存储过程时没有行这让我认为这些引号一定是错误的,但我显然无法正确。谁能看到为什么这不起作用?谢谢
来自proc的代码:
SELECT COUNT(*)
INTO v_PendingCheckCount
FROM FUND_CHANGE_REQUEST
WHERE STATUS IN ('PENDING_CHK', 'PEND_2ND_CHK')
AND PROVIDER IN (pProviderList);
过程调用:
CALL PackageName.ProcedureName('''A'',''B''')
pProviderList 是传递给过程的参数。
【问题讨论】:
-
您是否将 pProviderList 作为 VARCHAR 传递?类似的东西 - CREATE PROCEDURE ProcedureName(pProviderList VARCHAR)。
-
是的,它作为 Varchar2 传递
-
我认为您的问题是您传递给过程的字符串没有被解析为逗号分隔的列表 - 这与单引号无关。您可以通过使用 DBMS_OUTPUT 打印参数值来证明这一点 - 很确定您会看到单引号。
-
显然,恰好包含 SQL 语法的 单个字符串 与单独值的实际列表不同。如果它以这种方式工作,那将是完全灾难性的。我很困惑,有人会觉得这令人费解。
标签: oracle stored-procedures plsql