-
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"
请指导一下,是哪里理解的不对呢?
13个回答
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
创建的是函数,用的是存储过程组件吗。存储过程组件是调存储过程的,函数的话可以直接当一个普通的函数使用就可以了。
就是在表达式字段里面直接使用,比如get_deptfield2(xxx,xxx,xxx)
@kingpeng ,感谢,您这个方法可以用。原来表达式可以直接调用数据库内的自建函数!!!!!