【问题标题】:Mass Update in Oracle via stored procedre通过存储过程在 Oracle 中进行批量更新
【发布时间】:2013-08-26 02:07:56
【问题描述】:

我必须进行大规模更新。所以我写了一个程序。

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

请告诉我如何解决这个问题。

【问题讨论】:

  • 你能发布一个值:p_doh_sa clob 传递给程序吗?没有它,很难说这个错误的原因是什么。很可能函数 to_number 试图转换一些不是数字的值。

标签: sql oracle plsql oracle11g plsqldeveloper


【解决方案1】:

CLOB 上的REGEXP_SUBSTR 将返回CLOBSUBSTR 上的 CLOB 也将返回 CLOB。但是TO_NUMBERwill not work on a CLOB。所以你应该添加一个TO_CHAR,它总是返回一个VARCHAR2,这样就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多