脚本组件中存储过程组件使用问题

4146
13

xugj831 小试身手Lv3

发表于2020-4-23 09:59

悬赏1

已解决

楼主
各位大拿,咨询一个关于存储过程组件的问题:

我在数据库中创建了一个简单(但是重复性高)的函数: 依据两个输入参数的组合,输出另外一个值。

CREATE OR REPLACE FUNCTION "public"."get_deptfield2"(IN "in_bu" varchar, IN "in_field" varchar, INOUT "out_deptfield" varchar)





为何设定INOUT参数呢? 因为这个字段是新创建的。所以我将一个表达式作为存储过程的输入,也想的是可以作为返回值的输出。



但是,校验得到的结果: 输出结果没有被执行,还是最开始设置的默认值"aaaaaaaaaaaa"





请指导一下,是哪里理解的不对呢?



最近看过此主题的会员

wxw

Shirley

wwwwwx

GUCHY

chestnut

fumaozhong

淑离

10-321

leiz

116685222580

13120183963

ihthis

hhdtest

waejing

823583266

ddb

最佳答案
就是在表达式字段里面直接使用,比如get_deptfield2(xxx,xxx,xxx)
13个回答

只看楼主

小亿 管理员

发表于2020-4-23 10:04

只看该作者

取消 关注该作者的回复

沙发

已反馈,请稍等

wut 数据老手Lv5

发表于2020-4-23 10:07

只看该作者

取消 关注该作者的回复

板凳

单独执行储存过程没有问题吗?可以吧储存过程贴出来看看

xugj831 小试身手Lv3

发表于2020-4-23 10:09

只看该作者

取消 关注该作者的回复

地板

CREATE OR REPLACE FUNCTION "public"."get_deptfield2"(IN "in_bu" varchar, IN "in_field" varchar, INOUT "out_deptfield" varchar)
  RETURNS "pg_catalog"."varchar" AS $BODY$
       
--        DECLARE
        --out_deptfield VARCHAR;
       
        BEGIN
                -- Routine body goes here...
                out_deptfield=null;
               
                CASE
                        WHEN         in_bu in ('ETD1','ETD2','SSD','BHP','EQ','LPD','OTH') AND in_field = 'A01' THEN
                                out_deptfield='F01' ;
                        WHEN         in_bu in ('ETD1','ETD2','SSD','BHP','EQ','LPD','OTH') AND in_field = 'A02' THEN
                                out_deptfield='F02' ;
                        WHEN         in_bu in ('ETD1','ETD2','SSD','BHP','EQ','LPD','OTH') AND in_field = 'A12' THEN
                                out_deptfield='F12' ;
                        WHEN         in_bu in ('ETD1','ETD2','SSD','BHP','EQ','LPD','OTH') AND in_field in('A03','A09') THEN
                                out_deptfield='F03' ;
                        WHEN         in_bu in ('ETD1','ETD2','SSD','BHP','EQ','LPD','OTH') AND in_field in('A04','A05','A06','A07','A08','A10','A11') THEN
                                out_deptfield='F08' ;
                        WHEN         in_bu in ('BHM','SYS','OTH-YQ') AND in_field <> 'A02' THEN
                                out_deptfield='F81' ;
                        WHEN         in_bu in ('BHM','SYS','OTH-YQ') AND in_field = 'A02' THEN
                                out_deptfield='F71' ;
                ELSE out_deptfield='F00';
               
                END CASE;
               
                --RETURN out_deptfield;
                --RETURN out_deptfield;

        END;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

kingpeng 初学数据Lv2

发表于2020-4-23 10:09

只看该作者

取消 关注该作者的回复

5#

创建的是函数,用的是存储过程组件吗。存储过程组件是调存储过程的,函数的话可以直接当一个普通的函数使用就可以了。

xugj831 小试身手Lv3

发表于2020-4-23 10:21

只看该作者

取消 关注该作者的回复

6#

PG里边的存储过程和函数是一样的。
您说普通函数使用,能解释一下吗?

xugj831 小试身手Lv3

发表于2020-4-24 08:11

只看该作者

取消 关注该作者的回复

7#

沉下去了?

小亿 管理员

发表于2020-4-24 14:00

只看该作者

取消 关注该作者的回复

8#


没有,我帮您跟进着呢

kingpeng 初学数据Lv2

发表于2020-4-23 09:59

只看该作者

取消 关注该作者的回复

9#

就是在表达式字段里面直接使用,比如get_deptfield2(xxx,xxx,xxx)

xugj831 小试身手Lv3

发表于2020-4-27 11:06

只看该作者

取消 关注该作者的回复

10#

@kingpeng ,感谢,您这个方法可以用。原来表达式可以直接调用数据库内的自建函数!!!!!

xugj831 小试身手Lv3

发表于2020-4-27 11:29

只看该作者

取消 关注该作者的回复

11#

@kingpeng ,还有一个问题,这个函数的使用我发现,他的之前组件只能是表输入。如果不是表输入,这个函数将不会被识别的。

如何破解?

上一页12下一页共2页

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号