2016-04-06 46 views
0

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

ERROR [HY000] ERROR: Can't use a stored procedure in this context.

这不允许吗?

存储过程:

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 

回答

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)编写它。

0

执行存储过程,你必须运行此命令:

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

,而不是因为你已经书面:

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

举例

+0

“SELECT SP_TEST_PROC('abc')as test1”works,I guess it's just just conversion to it EXECUTE statement – Kelly

相关问题