您能否在 Select 中多次调用 Netezza 存储过程?
Can you call a Netezza stored procedure more than once in Select?
我在 Netezza 中创建了一个用于测试目的的简单存储过程,returns 一个字符串。当我从 select 语句调用它时,它工作正常,除非我在多列上多次调用它。我收到错误:
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 ;
BEGIN
RETURN 'A' || TEST_PAR;
END;
END_PROC;
我怎么称呼它:
SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2
要执行存储过程,您必须运行此命令:
EXECUTE SP_TEST_PROC('abc')
EXECUTE SP_TEST_PROC('def')
而不是你写的那样:
SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2
你可以去here举个例子
您不能在 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)编写它。
我在 Netezza 中创建了一个用于测试目的的简单存储过程,returns 一个字符串。当我从 select 语句调用它时,它工作正常,除非我在多列上多次调用它。我收到错误:
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 ;
BEGIN
RETURN 'A' || TEST_PAR;
END;
END_PROC;
我怎么称呼它:
SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2
要执行存储过程,您必须运行此命令:
EXECUTE SP_TEST_PROC('abc')
EXECUTE SP_TEST_PROC('def')
而不是你写的那样:
SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2
你可以去here举个例子
您不能在 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)编写它。