日期:2014-05-17  浏览次数:21153 次

oracle 中 java.sql.SQLException: ORA-01002: 提取违反顺序
在一个流程中设置了一个机器人节点,目的是:审批结束后,通过update语句,将表单中的一些内容更新到数据库person_info_t的表中,并将更新前后的值记录到新表info_update_record中。机器人节点中的sql语句,红色表示变量
update person_info_t set fd_work_phone_ext=:workphoneext, fd_mobile_no_office=:mobilenooffice, pad_mac=:mac , computer_name=:computer,tmp_type=1 where fd_login_name=:uname; 
--tmp_type=0或者=1是记录数据来源,因为update可能来自两种操作,流程是一种,通讯录更新是另外一种,通讯录更新时,不会更新tmp_type的值
Person_info_t 部分字段:

在person_info_t的表中,创建了一个trigger,当发生update时,触发,语句如下:
create or replace trigger mac_update_trig
before update or insert
on person_info_t
for each row
when ( new.pad_mac <> old.pad_mac or new.computer_name <> old.computer_name or new.fd_work_phone_ext <> old.fd_work_phone_ext or new.fd_mobile_no_office <> old.fd_mobile_no_office )
declare
  pre      varchar2(50);
  aft      varchar2(50);
  date_now date := sysdate;
  uname    varchar2(50);
Begin
--对于不同的update,对info_update_record进行insert,分别记录
  uname := :old.fd_login_name;
  if (:new.pad_mac <> :old.pad_mac) then
    pre := :old.pad_mac;
    aft := :new.pad_mac;
    insert into info_update_record
    values
      (uname, date_now, 'pad_mac', pre, aft, :new.tmp_type);
  end if;
  if (:new.computer_name <> :old.computer_name) then
    pre := :old.computer_name;
    aft := :new.computer_name;
    insert into info_update_record
    values
      (uname, date_now, '计算机名', pre, aft, :new.tmp_type);
  end if;
  if (:new.fd_work_phone_ext <> :old.fd_work_phone_ext) then
    pre := :old.fd_work_phone_ext;
    aft := :new.fd_work_phone_ext;
    insert into info_update_record
    values
      (uname, date_now, '分机号码', pre, aft, :new.tmp_type);
  end if;
  if (:new.fd_mobile_no_office <> :old.fd_mobile_no_office) then
    pre := :old.fd_mobile_no_office;
    aft := :new.fd_mobile_no_office;
    insert into info_update_record
    values
      (uname, date_now, '集团号', pre, aft, :new.tmp_type);
  end if;
  --重置tmp_type值为0
  :new.tmp_type := 0;
end;
info_update_record 全部字段:
 
 
报错部分:
 
java.sql.SQLException: ORA-01002: 提取违反顺序

以上update直接在plsql下操作是可以通过的,例如
update