我在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
答案 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)编写它。