在plsql案例中使用强制转换时,显示错误

在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

我想通过检查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%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;