您可以在Select中多次调用Netezza存储过程吗?

时间:2016-04-06 13:45:45

标签: sql netezza

我在Netezza中创建了一个用于测试目的的简单存储过程,它返回一个字符串。当我从select语句调用它时,它工作正常,除非我在多个列上多次调用它。我收到错误:

  

错误[HY000]错误:在此上下文中无法使用存储过程。

这是不允许的?

存储过程:

CREATE OR REPLACE PROCEDURE SP_TEST_PROC(VARCHAR(ANY))
RETURNS VARCHAR(32)
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    TEST_PAR ALIAS FOR $1;

BEGIN

RETURN 'A' || TEST_PAR;

END;
END_PROC;

我如何称呼它:

SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2

2 个答案:

答案 0 :(得分:0)

要执行存储过程,必须运行以下命令:

EXECUTE SP_TEST_PROC('abc')
EXECUTE SP_TEST_PROC('def')

而不是你写的:

SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2

您可以前往here获取示例

答案 1 :(得分:0)

您不能在SELECT中调用多个存储过程。您可以通过以下几种方式调用Netezza存储过程:

CALL SP_TEST_PROC('abc');
EXEC SP_TEST_PROC('abc');
SELECT SP_TEST_PROC('abc');

但是,使用SELECT时不能有FROM子句。 SELECT表单只是其他表单之一的同义词,并不像我们通常认为的那样是SELECT。

您可以找到有关调用存储过程here的文档。

如果您正在寻找标量函数,那么编写UDF可能会更好。但是,Netezza中的UDF不支持NZPLSQL作为一种语言。您必须使用其中一种受支持的UDF语言(例如C ++或Lua)编写它。