我在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发布于 2016-04-06 21:58:27
不能在SELECT中调用多个存储过程。有几种方法可以称为Netezza存储过程:
CALL SP_TEST_PROC('abc');
EXEC SP_TEST_PROC('abc');
SELECT SP_TEST_PROC('abc');但是,在使用SELECT时,您不能使用FROM子句。SELECT表单只是其他一种表单的同义词,并不像我们通常认为的那样是一个选择。
您可以找到有关调用存储过程这里的文档。
如果您正在寻找一个标量函数,那么编写一个UDF可能会更好。但是,Netezza中的UDF并不支持NZPLSQL作为一种语言。您必须用一种受支持的UDF语言(例如C++或Lua)编写它。
发布于 2016-04-06 13:52:16
要执行存储过程,必须运行以下命令:
EXECUTE SP_TEST_PROC('abc')
EXECUTE SP_TEST_PROC('def')而不是你写的那样:
SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2您可以使用这里作为示例
https://stackoverflow.com/questions/36453047
复制相似问题