-- 仮嗿³¨ãƒ†ãƒ¼ãƒ–ル è¿½åŠ CREATE OR REPLACE FUNCTION f_pre_order_detail_update( kubun integer, _preordermember integer, _takkyubin integer, _itemcd integer, _structcd integer, _stockcd integer, _count integer, upduser character varying, pc character varying) RETURNS integer AS $$ DECLARE rec RECORD; cntcheck integer; --kubun integer; title integer; in_kubun integer; BEGIN -- -- パラメータãƒã‚§ãƒƒã‚¯ -- -- 処ç†åŒºåˆ† IF kubun IS NULL OR kubun NOT IN (1,2,3,4,5) THEN RAISE EXCEPTION '処ç†åŒºåˆ†ãŒä¸æ£ã§ã™'; END IF; IF kubun IN (2,3,4,5) THEN IF _preordermember IS NULL THEN RAISE EXCEPTION '引数 _preordermember ã¯å¿…é ˆã§ã™'; END IF; END IF; IF kubun IN (1,2,3) THEN IF _itemcd IS NULL THEN RAISE EXCEPTION '引数 _itemcd ã¯å¿…é ˆã§ã™'; END IF; IF _structcd IS NULL THEN RAISE EXCEPTION '引数 _structcd ã¯å¿…é ˆã§ã™'; END IF; IF _stockcd IS NULL THEN RAISE EXCEPTION '引数 _stockcd ã¯å¿…é ˆã§ã™'; END IF; END IF; IF kubun IN (1,2) THEN IF _count IS NULL THEN RAISE EXCEPTION '引数 _count ã¯å¿…é ˆã§ã™'; END IF; IF s_check_upd(upduser, pc) = FALSE THEN RAISE EXCEPTION '引数 upduser&pc ãŒä¸æ£ã§ã™'; END IF; END IF; -- å˜åœ¨ãƒã‚§ãƒƒã‚¯ IF kubun IN (1,2,3) THEN SELECT stockcd INTO cntcheck FROM t_ex_stock_detail WHERE itemcd = _itemcd AND structcd = _structcd AND stockcd = _stockcd; IF NOT FOUND THEN RAISE EXCEPTION '引数 _itemcd,_structcd,_stockcd ã®ãƒ¬ã‚³ãƒ¼ãƒ‰ãŒå˜åœ¨ã—ã¾ã›ã‚“'; END IF; END IF; --å‰å‡¦ç† IF kubun = 1 THEN SELECT preorderno, takkyubin, upddate INTO rec FROM t_pre_order_title WHERE preordermember = _preordermember; IF FOUND THEN IF current_timestamp > rec.upddate + '1 days' THEN -- 1日以上 in_kubun := 2; ELSE -- 1日未満 in_kubun := 3; END IF; ELSE in_kubun := 1; END IF; ELSE SELECT preorderno INTO cntcheck FROM t_pre_order_title WHERE preordermember = _preordermember; END IF; --- æ›´æ–°å‡¦ç† --- IF kubun = 1 THEN -- è¿½åŠ IF in_kubun = 1 THEN INSERT INTO t_pre_order_title (preordermember, preorderdate, takkyubin, updusrnm, updpcnm) VALUES(_preordermember, current_date, _takkyubin, upduser, pc); INSERT INTO t_pre_order_detail(preorderno, itemcd, structcd, stockcd, count, updusrnm, updpcnm) VALUES(lastval(), _itemcd, _structcd, _stockcd, _count, upduser, pc); ELSIF in_kubun = 2 THEN UPDATE t_pre_order_title SET preorderdate = current_date, takkyubin = rec.takkyubin WHERE preorderno = rec.preorderno; DELETE FROM t_pre_order_detail WHERE preorderno = rec.preorderno; INSERT INTO t_pre_order_detail(preorderno, itemcd, structcd, stockcd, count, updusrnm, updpcnm) VALUES(rec.preorderno, _itemcd, _structcd, _stockcd, _count, upduser, pc); ELSIF in_kubun = 3 THEN UPDATE t_pre_order_title SET preorderdate = current_date, takkyubin = rec.takkyubin WHERE preorderno = rec.preorderno; SELECT preorderno INTO cntcheck FROM t_pre_order_detail WHERE preorderno = rec.preorderno AND itemcd = _itemcd AND structcd = _structcd AND stockcd = _stockcd; IF NOT FOUND THEN INSERT INTO t_pre_order_detail(preorderno, itemcd, structcd, stockcd, count, updusrnm, updpcnm) VALUES(rec.preorderno, _itemcd, _structcd, _stockcd, _count, upduser, pc); END IF; END IF; ELSIF kubun = 2 THEN UPDATE t_pre_order_title SET preorderdate = current_date, takkyubin = _takkyubin, updusrnm = upduser, updpcnm = pc WHERE preorderno = cntcheck; UPDATE t_pre_order_detail SET count = _count WHERE preorderno = cntcheck AND itemcd = _itemcd AND structcd = _structcd AND stockcd = _stockcd; ELSIF kubun = 3 THEN UPDATE t_pre_order_title SET preorderdate = current_date, updusrnm = upduser, updpcnm = pc WHERE preorderno = cntcheck; DELETE FROM t_pre_order_detail WHERE preorderno = cntcheck AND itemcd = _itemcd AND structcd = _structcd AND stockcd = _stockcd; ELSIF kubun = 4 THEN DELETE FROM t_pre_order_title WHERE preorderno = cntcheck; DELETE FROM t_pre_order_detail WHERE preorderno = cntcheck; ELSIF kubun = 5 THEN UPDATE t_pre_order_title SET preorderdate = current_date, updusrnm = upduser, updpcnm = pc WHERE preorderno = cntcheck; DELETE FROM t_pre_order_detail WHERE preorderno = cntcheck AND itemcd = _itemcd AND structcd = _structcd; END IF; RETURN 1; END; $$ LANGUAGE 'plpgsql' VOLATILE;