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

How to define an Array of values (or a Column) into a Procedure Argument?

我正在使用 Netezza SP,遇到了一个问题。

我有一个SP,定义为:

CREATE OR REPLACE PROCEDURE MY_PROC(VARCHAR(ANY)) RETURNS INTEGER LANGUAGE NZPLSQL
AS
    BEGIN_PROC
    DECLARE 
        v_temp ALIAS FOR ; 
        /* 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

我知道在第二种情况下我正在传递一个数组(我猜)但这不是程序所期望的。

现在我正在尝试有一个可以接受这些类型的值但到目前为止无法成功的程序,循环和所有我都小心但唯一的问题是我不知道如何通过的参数。

如有任何帮助,我们将不胜感激,如果我需要提供任何额外信息,请告诉我。

阿西夫

从 v7.2 开始,Netezza 中的存储过程只能通过以下方式调用,如 documented here.

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

请注意 SELECT 形式不允许 FROM 子句。

如果您希望存储过程作用于特定 table 中的特定列,该特定列在调用之间发生变化,您可以将这些名称作为参数传递给存储过程,并拥有完整的SQL 逻辑编码在其中。您甚至可以将任意代码传递到存储过程以在内部构建查询。

您现在尝试调用它的方式更像是调用用户定义的函数,这根本不适用于此处的存储过程。