首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在Select中多次调用Netezza存储过程吗?

可以在Select中多次调用Netezza存储过程吗?
EN

Stack Overflow用户
提问于 2016-04-06 13:45:44
回答 2查看 2.2K关注 0票数 0

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

错误HY000错误:不能在此上下文中使用存储过程。

这不允许吗?

存储过程:

代码语言:javascript
复制
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;

我怎么称呼它:

代码语言:javascript
复制
SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-06 21:58:27

不能在SELECT中调用多个存储过程。有几种方法可以称为Netezza存储过程:

代码语言:javascript
复制
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)编写它。

票数 0
EN

Stack Overflow用户

发布于 2016-04-06 13:52:16

要执行存储过程,必须运行以下命令:

代码语言:javascript
复制
EXECUTE SP_TEST_PROC('abc')
EXECUTE SP_TEST_PROC('def')

而不是你写的那样:

代码语言:javascript
复制
SELECT SP_TEST_PROC('abc') as test1, sp_test_proc('def') as test2

您可以使用这里作为示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36453047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档