-- 入金テーブル è¿½åŠ -- 区分㯠1,è¿½åŠ 2,変更 3,削除 ã®ã¿ CREATE OR REPLACE FUNCTION f_forward_detail_update( IN kubun integer, -- 区分 IN _orderno integer, -- å—æ³¨No IN _orderrowno integer, -- å—æ³¨è¡ŒNo IN _forwarddate date, -- å‡ºè·æ—¥ IN _forwardstate integer, -- 進æ—çŠ¶æ³ IN _returnreason varchar, -- è¿”å“ç†ç”± IN usr varchar, -- 更新ユーザ IN pc varchar, -- 更新マシン OUT errcd integer, OUT errmsg varchar, OUT code integer) AS $$ DECLARE rec RECORD; cntcheck integer; i integer; BEGIN -- -- パラメータãƒã‚§ãƒƒã‚¯ -- -- 処ç†åŒºåˆ† IF kubun IS NULL OR kubun NOT IN (1,2,3) THEN RAISE EXCEPTION '処ç†åŒºåˆ†ãŒä¸æ£ã§ã™'; END IF; IF kubun IN (1,2,3) THEN IF _orderno IS NULL THEN RAISE EXCEPTION 'å—æ³¨NOã¯å¿…é ˆã§ã™'; END IF; IF s_check_upd(usr, pc) = FALSE THEN RAISE EXCEPTION '引数 usr&pc ãŒä¸æ£ã§ã™'; END IF; END IF; IF kubun IN (1,2) THEN IF _forwardstate IS NULL THEN RAISE EXCEPTION '進æ—状æ³ã¯å¿…é ˆã§ã™'; END IF; IF s_check_length(_returnreason, 1024) = FALSE THEN RAISE EXCEPTION '引数 name ãŒä¸æ£ã§ã™'; END IF; END IF; -- å˜åœ¨ãƒã‚§ãƒƒã‚¯ IF kubun = 2 THEN SELECT orderno INTO cntcheck FROM t_order_title WHERE orderno = _orderno; IF NOT FOUND THEN RAISE EXCEPTION '引数 orderno ãŒt_order_titleã«å˜åœ¨ã—ã¾ã›ã‚“'; END IF; IF _orderrowno IS NOT NULL THEN SELECT orderrowno INTO cntcheck FROM t_order_detail WHERE orderno = _orderno AND orderrowno = _orderrowno; IF NOT FOUND THEN RAISE EXCEPTION '引数 orderrowno ãŒt_order_detailã«å˜åœ¨ã—ã¾ã›ã‚“'; END IF; END IF; END IF; ---- å‡¦ç† -- è¿½åŠ IF kubun = 1 THEN SELECT orderno INTO cntcheck FROM t_forward_detail WHERE orderno = _orderno; IF FOUND THEN UPDATE t_forward_detail SET forwarddate = _forwarddate, forwardstate = _forwardstate, returnreason = _returnreason, updusrnm = usr, updpcnm = pc WHERE orderno = _orderno; errcd := 1; errmsg := 'æ›´æ–°'; ELSE i := 1; LOOP INSERT INTO t_forward_detail(orderno, orderrowno, forwarddate, forwardstate, returnreason, updusrnm, updpcnm) VALUES(_orderno, i, _forwarddate, _forwardstate, _returnreason, usr, pc); EXIT WHEN i >= _orderrowno; i := i + 1; END LOOP; errcd := 1; errmsg := 'è¿½åŠ '; END IF; -- æ›´æ–° ELSIF kubun = 2 THEN -- å—æ³¨NO ã¨ å—æ³¨è¡ŒNOã§æ¤œç´¢ SELECT orderrowno INTO cntcheck FROM t_forward_detail WHERE orderno = _orderno AND orderrowno = _orderrowno; IF FOUND THEN -- 両方ã‚ã‚‹â—‹â—‹ UPDATE t_forward_detail SET forwarddate = _forwarddate, forwardstate = _forwardstate, returnreason = _returnreason, updusrnm = usr, updpcnm = pc WHERE orderno = _orderno AND orderrowno = _orderrowno; errcd := 1; errmsg := 'æ›´æ–°'; ELSE SELECT orderno INTO cntcheck FROM t_forward_detail WHERE orderno = _orderno; IF FOUND THEN -- å—æ³¨NOã¯ã‚ã‚‹ IF _orderrowno IS NULL THEN -- ○× UPDATE t_forward_detail SET forwarddate = _forwarddate, forwardstate = _forwardstate, returnreason = _returnreason, updusrnm = usr, updpcnm = pc WHERE orderno = _orderno; errcd := 1; errmsg := 'æ›´æ–°'; ELSE -- â—‹â–³ INSERT INTO t_forward_detail(orderno, orderrowno, forwarddate, forwardstate, returnreason, updusrnm, updpcnm) VALUES(_orderno, _orderrowno, _forwarddate, _forwardstate, _returnreason, usr, pc); errcd := 1; errmsg := 'è¿½åŠ '; END IF; ELSE -- å—æ³¨NOã‚‚ãªã„ IF _orderrowno IS NOT NULL THEN -- △△ INSERT INTO t_forward_detail(orderno, orderrowno, forwarddate, forwardstate, returnreason, updusrnm, updpcnm) VALUES(_orderno, _orderrowno, _forwarddate, _forwardstate, _returnreason, usr, pc); errcd := 1; errmsg := 'è¿½åŠ '; ELSE -- △× RAISE EXCEPTION 'å—æ³¨No[%]ã®ãƒ¬ã‚³ãƒ¼ãƒ‰ã¯ã‚りã¾ã›ã‚“',_orderno; END IF; END IF; END IF; -- 削除 ELSIF kubun = 3 THEN SELECT orderrowno INTO cntcheck FROM t_forward_detail WHERE orderno = _orderno AND orderrowno = _orderrowno; IF FOUND THEN UPDATE t_forward_detail SET delflg = TRUE, updusrnm = usr, updpcnm = pc WHERE orderno = _orderno AND orderrowno = _orderrowno; ELSIF _orderrowno IS NULL THEN SELECT orderrowno INTO cntcheck FROM t_forward_detail WHERE orderno = _orderno; IF FOUND THEN UPDATE t_forward_detail SET delflg = TRUE, updusrnm = usr, updpcnm = pc WHERE orderno = _orderno; ELSE RAISE EXCEPTION 'å—æ³¨No[%]ã®ãƒ¬ã‚³ãƒ¼ãƒ‰ãŒã‚りã¾ã›ã‚“',_orderno; END IF; ELSE RAISE EXCEPTION 'å—æ³¨No[%]ã¨å—注行No[%]ã®ãƒ¬ã‚³ãƒ¼ãƒ‰ãŒã‚りã¾ã›ã‚“', _orderno,_orderrowno; END IF; errcd := 1; code := _orderno; errmsg := '削除'; END IF; RETURN ; END; $$ LANGUAGE 'plpgsql' VOLATILE;