在plsql案例中使用强制转换时,显示错误
我想通过检查clob列的长度,将单个clob数据列值放入2个varchar2列中,但我在case语句中得到错误,行标记为**,它表示syntex error,我做错了什么在plsql案例中使用强制转换时,显示错误,plsql,Plsql,我想通过检查clob列的长度,将单个clob数据列值放入2个varchar2列中,但我在case语句中得到错误,行标记为**,它表示syntex error,我做错了什么 DECLARE v_tot_rows NUMBER (3); rqst_xml_1 ISG.CERT_TEST_CASE_GTWY_TXN.RQST_XML_1_TX%TYPE; rqst_xml_2 ISG.CERT_TEST_CASE_GTWY_TXN.RQST_XML_2_TX%TYP
DECLARE
v_tot_rows NUMBER (3);
rqst_xml_1 ISG.CERT_TEST_CASE_GTWY_TXN.RQST_XML_1_TX%TYPE;
rqst_xml_2 ISG.CERT_TEST_CASE_GTWY_TXN.RQST_XML_2_TX%TYPE;
CURSOR req_res_populate_cur
IS
SELECT scptc.SWR_CERT_PRJCT_TEST_CASE_ID,
orb_txn.MIME_HEAD_TX,
orb_txn.RSPNS_XML_TX,
orb_msg.RQST_GNRL_VLD_JSON_TX,
orb_msg.RQST_TEST_CASE_VLD_JSON_TX,
orb_msg.MRCH_ID
(
CASE
WHEN DBMS_LOB.GETLENGTH (orb_txn.RQST_XML_TX) <= 4000 THEN
rqst_xml_1 := CAST ( orb_txn . RQST_XML_TX AS VARCHAR2 ( 4000 ) ) * ,
rqst_xml_2 := ''
WHEN DBMS_LOB.GETLENGTH(orb_txn.RQST_XML_TX)>4000 THEN
rqst_xml_1:=CAST(substr(orb_txn.RQST_XML_TX,1,4000) AS VARCHAR2(4000)),
rqst_xml_2:=CAST(substr(orb_txn.RQST_XML_TX,4001)
END
)
FROM ISG.online_messages msg
JOIN ISG.SWR_CERT_PRJCT_TEST_CASE scptc
ON msg.online_message_id = scptc.TXN_ID,
ISG.GTWY_PLTFM_TXN_MSG orb_msg
JOIN ISG.GTWY_PLTFM_TXN orb_txn
ON orb_msg.GTWY_PLTFM_TXN_ID = orb_txn.GTWY_PLTFM_TXN_ID
WHERE msg.SPEC_ID = 60;;
BEGIN
FOR req_res IN req_res_populate_cur
LOOP
DBMS_OUTPUT.PUT_LINE (req_res.SWR_CERT_PRJCT_TEST_CASE_ID,
req_res.MIME_HEAD_TX,
req_res.rqst_xml_1,
req_res.rqst_xml_2,
req_res.RSPNS_XML_TX,
req_res.RQST_GNRL_VLD_JSON_TX,
req_res.RQST_TEST_CASE_VLD_JSON_TX,
req_res.MRCH_ID);
END LOOP;
END;
声明
v_tot_行数(3);
rqst_xml_1 ISG.CERT_TEST_CASE_GTWY_TXN.rqst_xml_1_TX%类型;
rqst_xml_2 ISG.CERT_TEST_CASE_GTWY_TXN.rqst_xml_2_TX%类型;
光标请求\u res\u填充\u cur
是
选择scptc.SWR\u CERT\u PRJCT\u TEST\u CASE\u ID,
orb_txn.MIME_HEAD_TX,
orb_txn.RSPNS_XML_TX,
orb_msg.RQST_GNRL_VLD_JSON_TX,
orb_msg.RQST_测试_案例_VLD_JSON_TX,
orb_msg.MRCH_ID
(
案例
当DBMS_LOB.GETLENGTH(orb_txn.RQST_XML_TX)4000时
rqst_xml_1:=CAST(substr(orb_txn.rqst_xml_TX,14000)作为VARCHAR2(4000)),
rqst_xml_2:=CAST(substr(orb_txn.rqst_xml_TX,4001)
结束
)
来自ISG.online\u消息msg
加入ISG.SWR\U证书\U PRJCT\U测试案例scptc
在msg.online_message_id=scptc.TXN_id上,
ISG.GTWY_PLTFM_TXN_MSG orb_MSG
加入ISG.GTWY_PLTFM_TXN orb_TXN
在orb_msg.GTWY_PLTFM_TXN_ID=orb_TXN.GTWY_PLTFM_TXN_ID上
其中msg.SPEC_ID=60;;
开始
对于请求中的请求,填充当前
环
DBMS_OUTPUT.PUT_LINE(请求_res.SWR_CERT_PRJCT_TEST_CASE_ID,
请求\u res.MIME\u HEAD\u TX,
REQU_res.rqst_xml_1,
req_res.rqst_xml_2,
req_res.RSPNS_XML_TX,
请求资源RQST GNRL VLD JSON TX,
req_res.RQST_测试_案例_VLD_JSON_TX,
请求资源(MRCH ID);
端环;
结束;
您的问题是您的SELECT
-语句无效。您试图在查询中设置变量(plsql块)。这是不允许的
您需要选择列中的值。这里我添加了两列。每个xml值一列
SELECT scptc.SWR_CERT_PRJCT_TEST_CASE_ID,
orb_txn.MIME_HEAD_TX,
orb_txn.RSPNS_XML_TX,
orb_msg.RQST_GNRL_VLD_JSON_TX,
orb_msg.RQST_TEST_CASE_VLD_JSON_TX,
orb_msg.MRCH_ID,
CASE --Column-Start
WHEN DBMS_LOB.GETLENGTH (orb_txn.RQST_XML_TX) <= 4000
THEN
CAST (orb_txn.RQST_XML_TX AS VARCHAR2 (4000))
WHEN DBMS_LOB.GETLENGTH (orb_txn.RQST_XML_TX) > 4000
THEN
CAST (
SUBSTR (orb_txn.RQST_XML_TX, 1, 4000) AS VARCHAR2 (4000))
END
AS my_rqst_xml_1, -- Column-End. In this column you'll have the value for xml_1
CASE --Column-Start
WHEN DBMS_LOB.GETLENGTH (orb_txn.RQST_XML_TX) <= 4000
THEN
''
WHEN DBMS_LOB.GETLENGTH (orb_txn.RQST_XML_TX) > 4000
THEN
CAST (SUBSTR (orb_txn.RQST_XML_TX, 4001) AS VARCHAR2 (4000))
END
AS my_rqst_xml_2 -- Column-End. In this column you'll have the value for xml_12
FROM ISG.online_messages msg
JOIN ISG.SWR_CERT_PRJCT_TEST_CASE scptc
ON msg.online_message_id = scptc.TXN_ID,
ISG.GTWY_PLTFM_TXN_MSG orb_msg
JOIN ISG.GTWY_PLTFM_TXN orb_txn
ON orb_msg.GTWY_PLTFM_TXN_ID = orb_txn.GTWY_PLTFM_TXN_ID
WHERE msg.SPEC_ID = 60
我不得不猜测,但似乎您不想声明变量:
rqst_xml_1 ISG.CERT_TEST_CASE_GTWY_TXN.RQST_XML_1_TX%TYPE;
rqst_xml_2 ISG.CERT_TEST_CASE_GTWY_TXN.RQST_XML_2_TX%TYPE;
只有当您想处理这些值时才需要使用它。错误?什么错误?这是我最近看到的最不正确的PL/SQL语法。我尝试对其进行一点格式化。显然有些代码被复制到select语句中。但我认为问题很清楚;)
rqst_xml_1 ISG.CERT_TEST_CASE_GTWY_TXN.RQST_XML_1_TX%TYPE;
rqst_xml_2 ISG.CERT_TEST_CASE_GTWY_TXN.RQST_XML_2_TX%TYPE;