1

一括更新を行う必要があります。ということで手順を書いてみました。

CREATE OR REPLACE PROCEDURE or_doh_rcause_sm_wip_upd_sp ( 
   p_rcause_cd   VARCHAR2,  
   p_doh_sa           clob 
)
IS
v_plant_cd              VARCHAR2 (8);
v_doh_sa                NUMBER          := 0;
v_ins_upd               CHAR(1);
Begin
for i in (select regexp_substr( p_doh_sa, '[^;]+', 1, rownum) result
          from dual
         connect by level <= length(regexp_replace( p_doh_sa, '[^;]+')) + 1)
   LOOP
    v_doh_sa     := TO_NUMBER(substr( i.result||',', 1, instr(i.result,',')-1 ),'9999999999999999999') ;
    v_ins_upd    := substr(i.result, instr(i.result,',',1)+1,1);
    v_plant_cd   := substr( i.result,instr(i.result,',',1,2)+1 );

IF v_ins_upd = 'U' THEN

           update OR_DOH_PM_SM_ROOT_CAUSE_T set ROOT_CAUSE_SA = p_rcause_cd 
           where DOH_SA = v_doh_sa
           AND   Plant_cd = v_plant_cd;
END IF;
END LOOP;
END;

例:p_doh_sa:'942168,I,FV52;942167,I,FV52;';

このように、私は500セット以上になります。彼らが実行する場合、フロントエンドからいつ

エラーが発生するORA-01460: unimplemented or unreasonable conversion requested

これを解決する方法を教えてください。

4

1 に答える 1

0

REGEXP_SUBSTRon aは aCLOBを返しますCLOBSUBSTRon aCLOBも a を返しますCLOB。ただしTO_NUMBER 、 CLOB では機能しませんTO_CHARしたがって、常に a を返す a を追加する必要があり、それでうまくいくはずVARCHAR2です。

于 2013-08-23T09:39:39.487 に答える