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

Posted

技术标签:

【中文标题】如何将值数组(或列)定义为过程参数?【英文标题】:How to define an Array of values (or a Column) into a Procedure Argument? 【发布时间】:2015-04-02 10:00:29 【问题描述】:

我正在开发 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

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

现在我正在尝试建立一个可以接受这些值但到目前为止未能成功的程序,循环和我所注意的一切,但唯一的问题是我不知道如何通过的参数。

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

阿西夫

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

是的。 .同意你。 . :)

以上是关于如何将值数组(或列)定义为过程参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值的“数组”传递给我的存储过程?

如何将值附加到命令行参数数组?

matlab中的length表示啥?应该如何使用?

如何给SQLSERVER存储过程传递数组参数

如何在postgresql过程中为多维数组赋值

如何交换二维数组中的行或列?