&&原表:
create table work_reco(SERIAL_NO,
  reco_ID varchar(50),
  reco_DATE date,
  quantity number,   
  Content varchar(2000))
目标:调用oracle数据库存储过程,将work_reco的所有记录写入另外俩个表。
&&必须要调用的存储过程如下(禁止修改):
CREATE OR REPLACE PROCEDURE fox.Save_work_Record
(
  p_work_reco_ID varchar2,
  p_work_reco_DATE date,
  p_quantity number,
  p_Content varchar2
  )
Is
  pct number(2);
  v_RID varchar(50);
  v_ProcessRecord varchar(2000);
  v_BStr varchar(100);
BEGIN
  Select Count(work_reco_ID) into pct from work_reco where work_reco_ID=p_work_reco_ID;
  v_ProcessRecord:='工作记录:';
  v_ProcessRecord:=v_ProcessRecord||'开始时间:'||to_char(p_work_reco_DATE   
,'YYYY-MM-DD')||';';
  v_ProcessRecord:=v_ProcessRecord||'次数:'||p_quantity||'次'||';';   
  v_ProcessRecord:=v_ProcessRecord||'处理经过:'||p_Content||';';
  if pct=0 then
  INSERT Into work_reco(SERIAL_NO,work_reco_ID,work_reco_DATE,quantity,Content)
  VALUES
  (seq_work_reco_regist.Nextval,p_work_reco_ID,p_work_reco_DATE,p_quantity,p_Content);&&SERIAL_NO由系统生成
  /**进入到另一个记录**/
Select BEFORE_STR into v_BStr from SANATORIUM_CATELOG where tiaojian;&&从单位信息表获取编号前缀
  v_Bstr:=v_Bstr||'-PRJL-';
  AutoNo(v_Bstr,v_RID,50);&&调用一个自动编号的存储过程
  commit;
  Save_Process_RECORD (v_RID,v_CareRecord);&&写入
  commit;
else
  Update work_reco Set
  work_reco_DATE=p_work_reco_DATE,
  Content=p_Content,
  BEGIN_DATE=p_BEGIN_DATE,
  quantity=p_quantity
  where work_reco_ID=p_work_reco_ID;
  Save_Process_RECORD (v_RID,v_CareRecord);
 commit;
end if;
end Save_work_Record

解决方案 »

  1.   

    可能我没说明白
    我是想调用fox.Save_work_Record这个过程
    把表work_reco的数据写入另一个oracle库的表work_reco和Process_RECORD 
    其中俩个work_reco表结构相同。 
      

  2.   

    调用存储过程的问题解决了,代码如下:
    但字符集仍是个问题,传入ORACLE数据库的中文显示为乱码。
    SET DATE SHORT
    OPEN DATABASE ylgl
    LOCAl a1
    IF USEd( ‘f_work_reco’)  
    SELECT f_work_reco
    else
    use f_work_reco
    endif
    SELECT * FROM f_work_reco INTO CURSOR tmp;SCAN  
      SCATTER MEMVAR
      a1=tmp.f_work_reco_DATE  
      a1=DTOC(a1)
      lnReturn=SQLEXEC(lreturn,"call fox.Save_work_Record('"+ TRIM(tmp.f_work_reco_ID ) +"',to_date('"+ a1 +" ','yyyy/mm/dd'),'"+ tmp.f_quantity +"','"+ TRIM(tmp.f_Content ) +"')")
      SELECT tmp
    ENDSCAN
    If lnReturn>0  
    Messagebox('开始upload数据表!',0,'提示')
    Else &&失败
    MessageBox("更新数据失败",16,"BUFFER")
    return
    ENDIF
    =SQLDisconnect(lreturn)&&断开