我正在研究Netezza SP并遇到问题。
我有一个SP,定义为:
CREATE OR REPLACE PROCEDURE MY_PROC(VARCHAR(ANY)) RETURNS INTEGER LANGUAGE NZPLSQL
AS
BEGIN_PROC
DECLARE
v_temp ALIAS FOR $1;
/* Other decalarations */
result_ts INTEGER;
BEGIN
result_ts := 0;
/* Procedure Body */
RETURN result_ts;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'Exception Raised: %', SQLERRM;
END;
END_PROC;
如果我使用一个值运行此SP,例如:
SELECT MY_PROC('TEST_INPUT');
但是,如果我尝试使用列值运行它,例如:
SELECT MY_PROC(TEST_COLUMN) FROM TEST_TABLE;
它给我的错误如下:
ERROR: Can't use a stored procedure in this context
我知道在第二种情况下我传递了一个数组(我猜)但这不是程序所预期的。
现在我正在尝试拥有一个可以接受这些值的程序,但到目前为止还没有成功,LOOPing和我所有的注意事项,但只有问题是我不知道如何通过的参数。
如果我需要提供任何额外信息,请与我们联系。
阿西
答案 0 :(得分:2)
自v2.2起,Netezza中的存储过程只能通过以下方式调用,如documented here.
CALL sproc_name(...);
EXEC sproc_name(...);
SELECT sproc_name(...);
请注意,SELECT表单不允许使用FROM子句。
如果希望存储过程作用于从调用更改为调用的特定表的特定列,则可以将这些列的名称作为参数传递给存储过程,并将整个SQL逻辑编码在其中。您甚至可以将任意代码传递到存储过程以在内部构建查询。
现在尝试调用它的方式更像是调用用户定义的函数,而这只是在这里使用存储过程。