Oacle 저장 프로시저 입력 XML
CREATE OR REPLACE
PROCEDURE proc_sys_parameter(
pi_xml IN CLOB, -- (XML )
po_cod OUT NUMBER, -- (0= , 0 )
po_msg OUT VARCHAR2 -- ( )
) IS
--
--
/*
<?xml version="1.0" encoding="utf-8"?>
<XSF>
<HEAD>
<USER_ID>100</USER_ID> <!-- ID( -1) -->
<OPERATE_TYPE>0</OPERATE_TYPE> <!-- (0= ,1= ,-1= ) -->
</HEAD>
<BODY>
<ROWS>
<ROW>
<PARAMETER_KEY>AUTOMATIC_RECEIPT</PARAMETER_KEY> <!-- -->
<PARAMETER_VALUE>7</PARAMETER_VALUE> <!-- -->
<PARAMETER_NAME> </PARAMETER_NAME> <!-- -->
<VALID_FLAG>1</VALID_FLAG> <!-- (0= ,1= ) -->
</ROW>
</ROWS>
</BODY>
</XSF>
*/
--
vi_count NUMBER(2);
vi_cod NUMBER(6);
vc_msg VARCHAR2(4000);
vc_body CLOB;
vx_param_config sys.xmlType;
--
vi_opt_type NUMBER(2);
vc_param_key t_sys_parameter_config.parameter_key%TYPE;
vc_param_value t_sys_parameter_config.parameter_value%TYPE;
vc_param_name t_sys_parameter_config.parameter_name%TYPE;
vi_valid_flag t_sys_parameter_config.valid_flag%TYPE;
--
vc_opt_type_path VARCHAR2(50) := '/XSF/HEAD/OPERATE_TYPE';
vc_param_key_path VARCHAR2(50) := '/XSF/BODY/ROWS/ROW/PARAMETER_KEY';
vc_param_value_path VARCHAR2(50) := '/XSF/BODY/ROWS/ROW/PARAMETER_VALUE';
vc_param_name_path VARCHAR2(50) := '/XSF/BODY/ROWS/ROW/PARAMETER_NAME';
vc_valid_flag_path VARCHAR2(50) := '/XSF/BODY/ROWS/ROW/VALID_FLAG';
--
EXP_XML_PARSE EXCEPTION;
EXP_PARM_GET EXCEPTION;
EXP_PARM_CHECK EXCEPTION;
EXP_NOT_EXISTS EXCEPTION;
EXP_EXISTS EXCEPTION;
BEGIN
--
vi_cod := 1;
vc_msg := '';
--
dbms_lob.createTemporary(vc_body, TRUE);
--
BEGIN
vx_param_config := sys.xmlType.createXML(pi_xml);
EXCEPTION
WHEN OTHERS THEN
vi_cod := 1;
vc_msg := ' [CLOB] [XMLTYPE] ';
RAISE EXP_XML_PARSE;
END;
--
BEGIN
SELECT TRIM(ExtractValue(vx_param_config, vc_opt_type_path)), --
TRIM(ExtractValue(vx_param_config, vc_param_key_path)), --
TRIM(ExtractValue(vx_param_config, vc_param_value_path)), --
TRIM(ExtractValue(vx_param_config, vc_param_name_path)), --
TRIM(ExtractValue(vx_param_config, vc_valid_flag_path)) --
INTO vi_opt_type, vc_param_key, vc_param_value, vc_param_name, vi_valid_flag
FROM dual;
EXCEPTION
WHEN OTHERS THEN
vi_cod := 2;
vc_msg := ' :' || SQLERRM;
RAISE EXP_PARM_GET;
END;
--
IF vi_opt_type NOT IN (-1,0,1) THEN
vi_cod := 3;
vc_msg := ' [' || vi_opt_type || '] !';
RAISE EXP_PARM_CHECK;
ELSIF vi_opt_type = 0 AND (vc_param_key IS NULL OR LENGTH(vc_param_key) = 0 OR vc_param_value IS NULL OR LENGTH(vc_param_value) = 0 OR vc_param_name IS NULL OR LENGTH(vc_param_name) = 0) THEN
vi_cod := 3;
vc_msg := ' : 、 、 !';
RAISE EXP_PARM_CHECK;
ELSIF vi_opt_type IN(-1, 1) AND (vc_param_key IS NULL OR LENGTH(vc_param_key) = 0) THEN
vi_cod := 3;
vc_msg := CASE WHEN vi_opt_type = -1 THEN ' ' ELSE ' ' END || ' : !';
RAISE EXP_PARM_CHECK;
END IF;
--
SELECT COUNT(t.parameter_key) INTO vi_count
FROM t_sys_parameter_config t
WHERE t.parameter_key = vc_param_key;
IF vi_opt_type = 0 AND vi_count > 0 THEN
vi_cod := 101;
vc_msg := ' [KEY=' || vc_param_key || '] , !';
RAISE EXP_EXISTS;
ELSIF vi_opt_type IN(-1,1) AND vi_count = 0 THEN
vi_cod := 100;
vc_msg := ' [KEY=' || vc_param_key || '] , !';
RAISE EXP_NOT_EXISTS;
END IF;
-- 、
IF vi_opt_type = -1 THEN
DELETE FROM t_sys_parameter_config t1 WHERE t1.parameter_key = vc_param_key;
ELSE
MERGE INTO t_sys_parameter_config ta
USING (
SELECT vc_param_key parameter_key, vc_param_value parameter_value, vc_param_name parameter_name, vi_valid_flag valid_flag
FROM dual
) tb
ON (ta.parameter_key = tb.parameter_key)
WHEN MATCHED THEN
UPDATE
SET ta.parameter_name = NVL(tb.parameter_name, ta.parameter_name),
ta.parameter_value = NVL(tb.parameter_value, ta.parameter_value),
ta.valid_flag = NVL(tb.valid_flag, ta.valid_flag),
ta.update_time = SYSDATE
WHEN NOT MATCHED THEN
INSERT (parameter_key, parameter_value, parameter_name, valid_flag, create_time)
VALUES (tb.parameter_key, tb.parameter_value, tb.parameter_name, NVL(tb.valid_flag,1), SYSDATE);
END IF;
--
COMMIT;
po_cod := 0;
po_msg := CASE vi_opt_type
WHEN -1 THEN ' '
WHEN 0 THEN ' '
WHEN 1 THEN ' '
END || ' [KEY=' || vc_param_key || '] !';
--
EXCEPTION
WHEN EXP_XML_PARSE THEN
po_cod := vi_cod;
po_msg := vc_msg;
WHEN EXP_PARM_GET THEN
po_cod := vi_cod;
po_msg := vc_msg;
WHEN EXP_PARM_CHECK THEN
po_cod := vi_cod;
po_msg := vc_msg;
WHEN EXP_NOT_EXISTS THEN
po_cod := vi_cod;
po_msg := vc_msg;
WHEN EXP_EXISTS THEN
po_cod := vi_cod;
po_msg := vc_msg;
WHEN OTHERS THEN
ROLLBACK;
po_cod := SQLCODE;
po_msg := CASE vi_opt_type
WHEN -1 THEN ' '
WHEN 0 THEN ' '
WHEN 1 THEN ' '
END || ' [KEY=' || vc_param_key || '] :' || SQLERRM;
END proc_sys_parameter;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.