如何将 Netezza 存储过程的返回值捕获到变量中?

Posted

技术标签:

【中文标题】如何将 Netezza 存储过程的返回值捕获到变量中?【英文标题】:How to capture return value from Netezza stored procedure into a variable? 【发布时间】:2014-01-31 09:52:40 【问题描述】:

如果有人指出将 Netezza 存储过程返回值捕获到变量中的正确方法,我将不胜感激。

create or replace procedure test() returns varchar(10) language nzplsql as
begin
 return "success";
end;

然后类似(在另一个过程中)

var_name := call test();

将“成功”捕获到变量var_name

非常感谢。

【问题讨论】:

【参考方案1】:

我相信这里的区别是在语法中包含单词“Call”会导致 NZPLSQL 丢弃 Proc Call 的结果。 (ref)

所以而不是

var_name := call test();

你只是想要

var_name := test();

注意:如果您想要返回多个值,您应该查看以下描述使用 reftable 的文档。

http://pic.dhe.ibm.com/infocenter/ntz/v7r0m3/index.jsp?topic=%2Fcom.ibm.nz.sproc.doc%2Fc_sproc_returning_a_result_set.html

【讨论】:

【参考方案2】:

请在下面找到 2 个程序,其中第一个程序的返回值被第二个程序捕获 -

程序 VarunTest -

CREATE OR REPLACE PROCEDURE varunTest()
LANGUAGE NZPLSQL RETURNS varchar(255) AS

BEGIN_PROC

DECLARE

BEGIN
        return 'varunTest';

END;


END_PROC;

创建过程

\i varunTest.sql

程序 BajajTest

CREATE OR REPLACE PROCEDURE bajajTest()
LANGUAGE NZPLSQL RETURNS varchar(255) AS

BEGIN_PROC

DECLARE
 v_test varchar;

BEGIN
 v_test := varuntest();

 raise notice 'result => %', v_test;

END;


END_PROC;

创建过程

\i bajajTest.sql

调用过程

call bajajTest();

程序结果 -

NOTICE:  result => varunTest
BAJAJTEST
-----------

(1 row)

希望这会对您有所帮助。 :)

【讨论】:

以上是关于如何将 Netezza 存储过程的返回值捕获到变量中?的主要内容,如果未能解决你的问题,请参考以下文章

使用存储过程将值插入到 netezza

在不使用 out 参数的情况下将存储过程输出捕获到变量中

返回 Netezza 查询结果

Netezza 存储过程错误

在 netezza 存储过程中立即执行不会向表中插入值

SQL SERVER 存储过程中SELECT 返回值如何赋值给变量