如何将值数组(或列)定义为过程参数?

时间:2015-04-02 10:00:29

标签: stored-procedures netezza

我正在研究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和我所有的注意事项,但只有问题是我不知道如何通过的参数。

如果我需要提供任何额外信息,请与我们联系。

阿西

1 个答案:

答案 0 :(得分:2)

自v2.2起,Netezza中的存储过程只能通过以下方式调用,如documented here.

CALL sproc_name(...);
EXEC sproc_name(...);
SELECT sproc_name(...);

请注意,SELECT表单不允许使用FROM子句。

如果希望存储过程作用于从调用更改为调用的特定表的特定列,则可以将这些列的名称作为参数传递给存储过程,并将整个SQL逻辑编码在其中。您甚至可以将任意代码传递到存储过程以在内部构建查询。

现在尝试调用它的方式更像是调用用户定义的函数,而这只是在这里使用存储过程。