我在SQL Developer(Oracle)中创建了一个存储过程:
CREATE OR REPLACE Procedure SP_test
(Identificadores IN varchar,
separador IN varchar,
codigo IN char,
resultSet out sys_refcursor)
AS
BEGIN
open resultSet for
SELECT DISTINCT
(tb.CODIGO||separador||tb.NOMBRE) AS Campo
FROM TABLA tb
WHERE
tb.CODIGO = codigo
and concat(tb.IDENTIFICADOR,tb.TECLA) in (Identificadores);
-- and concat(tb.IDENTIFICADOR,tb.TECLA) in ('FR45');
END;
/
执行存储过程时出现问题,因为结果是:"过程成功完成",但不显示任何数据。相反,如果您只更改Identifiers变量中的WHERE子句的值(硬编码值,如在注释行中),它会返回所有对应的行。如果你传递相同的值,我不明白xq参数不起作用。所以我执行程序:
set serveroutput on;
variable rs refcursor;
exec SP_test('FR45','|', '1',:rs);
print rs;
任何其他参数都没有错误,虽然我尝试过只发送" FR45"作为参数标识符,应用程序可以发送由","分隔的代码列表。 (从那里导入使用IN而不是简单的EQUAL)。我已经尝试过使用" instr()"而不是IN甚至创建视图......什么都没有。
超过4天我无法找到解决方案:(请...我知道应该做什么,以便程序识别IN子句中的Identifiers参数并返回我的数据列需要?:(
PS我在SQL-Server中使用了相同的程序,它运行得很完美..