ITPub博客

首页 > 数据库 > Oracle > @@ 郁闷 . ORACLE的触发器报错请大家帮助,该怎么处理

@@ 郁闷 . ORACLE的触发器报错请大家帮助,该怎么处理

Oracle 作者:eric409 时间:2012-04-14 17:06:54 0 删除 编辑
CREATE OR REPLACE TRIGGER MSGTEST.UPDATEOWNERAFTER INSERT ON MSGTEST.FLOW_INSTANCE FOR EACH ROWDECLARE     TMPPROCESSID VARCHAR2(30):=NULL ;    TMPFLOWID VARCHAR2(30):=NULL;BEGIN    SELECT PROCESS_INS_OID INTO TMPPROCESSID,FLOW_INS_OID INTO TMPFLOWID FROM FLOW_INSTANCE WHERE     eventid:=old.eventid and PROCESSID in ("PR010","PR011","PR012","PR013","PR026","PR027") and OWNER in ("00120000","00120008","HOGM0001","T2209") and status = 1     and (SELECT cost_center FROM MSGTEST.org_position WHERE org_code in     (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq = 0 and eventid:=old.eventid)) = "801" ;    IF TMPFLOWID IS NOT NULL THEN        UPDATE MSGTEST.FLOW_INSTANCE set OWNER="HOCE0001",REALOWNER="HOCE0001" WHERE PROCESS_INS_OID:=TMPPROCESSID AND FLOW_INS_OID:=TMPFLOWID;    END IF;END;

报的错误:

5?? ?59?? ?PL/SQL: ORA-00923: 未找到预期 FROM 关键字
5?? ?5?? ?PL/SQL: SQL Statement ignored
11?? ?101?? ?PL/SQL: ORA-00920: 无效的关系运算符
11?? ?9?? ?PL/SQL: SQL Statement ignored

?

特别是"无效的关系运算符"这里 居然是 ="801" 这里的问题 不明白 求解



------------------------------------------------------------------------------------------------------------------
问题补充:
meng22623 写道
SELECT PROCESS_INS_OID INTO TMPPROCESSID,FLOW_INS_OID INTO TMPFLOWID FROM FLOW_INSTANCE

有这种写法吗?应该是
 SELECT PROCESS_INS_OID ,FLOW_INS_OID INTO TMPPROCESSID,TMPFLOWID FROM FLOW_INSTANCE

我是2个变量怎么写 ?

------------------------------------------------------------------------------------------------------------------
问题补充:
meng22623 写道
SELECT PROCESS_INS_OID INTO TMPPROCESSID,FLOW_INS_OID INTO TMPFLOWID FROM FLOW_INSTANCE

有这种写法吗?应该是
 SELECT PROCESS_INS_OID ,FLOW_INS_OID INTO TMPPROCESSID,TMPFLOWID FROM FLOW_INSTANCE

不好意思啊 刚才没看清楚 我再试试

------------------------------------------------------------------------------------------------------------------
问题补充:
AngelAndAngel 写道
引用
and (SELECT cost_center FROM MSGTEST.org_position WHERE org_code in   
11.    (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq = 0 and eventid:=old.eventid)) = "801" ;  

这个后面不是条件吗 不能这样用的 必须是xx=(select fjdlf from ……)这样的

试了 仍然报相同的错误 修改后的样子
引用

SELECT PROCESS_INS_OID ,FLOW_INS_OID INTO TMPPROCESSID,TMPFLOWID FROM FLOW_INSTANCE WHERE
    eventid:=old.eventid and PROCESSID in ("PR010","PR011","PR012","PR013","PR026","PR027") and OWNER in ("00120000","00120008","HOGM0001","T2209") and status = 1
    and "801"=(SELECT cost_center FROM MSGTEST.org_position WHERE org_code in
    (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq=0 and eventid:=old.eventid)) ;



------------------------------------------------------------------------------------------------------------------
问题补充:
AngelAndAngel 写道
改成
SELECT PROCESS_INS_OID ,FLOW_INS_OID INTO TMPPROCESSID,TMPFLOWID FROM FLOW_INSTANCE WHERE
    eventid:=old.eventid and PROCESSID in ("PR010","PR011","PR012","PR013","PR026","PR027") and OWNER in ("00120000","00120008","HOGM0001","T2209") and status = 1
    and exists (SELECT op.cost_center FROM MSGTEST.org_position op WHERE org_code in
    (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq=0 and eventid:=old.eventid) and op.cost_center="801") ;


晕 刚刚剪贴到if判断那条更新语句就只有PL/SQL: ORA-00920: 无效的关系运算符和PL/SQL: SQL Statement ignored这2个错误了


------------------------------------------------------------------------------------------------------------------
问题补充:
AngelAndAngel 写道
引用
晕 刚刚剪贴到if判断那条更新语句就只有PL/SQL: ORA-00920: 无效的关系运算符和PL/SQL: SQL Statement ignored这2个错误了

貌似有几个错误。java.net.BindException: Address already in use: JVM_Bind@@ <wbr>郁闷 <wbr>. <wbr>ORACLE的触发器报错请大家帮助,该怎么处理

是啊 在找 我对这个不熟悉......

------------------------------------------------------------------------------------------------------------------
问题补充:
AngelAndAngel 写道
引用
晕 刚刚剪贴到if判断那条更新语句就只有PL/SQL: ORA-00920: 无效的关系运算符和PL/SQL: SQL Statement ignored这2个错误了

貌似有几个错误。@@ <wbr>郁闷 <wbr>. <wbr>ORACLE的触发器报错请大家帮助,该怎么处理

修改成了这样:
引用

CREATE OR REPLACE TRIGGER MSGTEST.UPDATEOWNER
AFTER INSERT ON MSGTEST.FLOW_INSTANCE FOR EACH ROW
declare
    FLOWID varchar2(20);
BEGIN
    SELECT FLOW_INS_OID INTO FLOWID FROM FLOW_INSTANCE WHERE
    eventid:=old.eventid and PROCESSID in ("PR010","PR011","PR012","PR013","PR026","PR027") and OWNER in ("00120000","00120008","HOGM0001","T2209") and status = 1
    and "801"=(SELECT op.cost_center FROM MSGTEST.org_position op WHERE org_code in
    (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID ="PR013" and seq=0 and eventid:=old.eventid)) ;

    IF FLOWID IS NOT NULL THEN
        :NEW.OWNER:="HOCE0001";
        :NEW.REALOWNER:="HOCE0001";
    END IF;
END;
还是报错......

------------------------------------------------------------------------------------------------------------------
问题补充:
AngelAndAngel 写道
改成
SELECT PROCESS_INS_OID ,FLOW_INS_OID INTO TMPPROCESSID,TMPFLOWID FROM FLOW_INSTANCE WHERE
    eventid:=old.eventid and PROCESSID in ("PR010","PR011","PR012","PR013","PR026","PR027") and OWNER in ("00120000","00120008","HOGM0001","T2209") and status = 1
    and exists (SELECT op.cost_center FROM MSGTEST.org_position op WHERE org_code in
    (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq=0 and eventid:=old.eventid) and op.cost_center="801") ;

修改为这样 编译通过 不过还有个行级更新问题需要处理
引用

CREATE OR REPLACE TRIGGER MSGTEST.UPDATEOWNER
AFTER INSERT ON MSGTEST.FLOW_INSTANCE
FOR EACH ROW
DECLARE
    TMP_PROCESSID VARCHAR(30);
    TMP_FLOWID VARCHAR(30);
BEGIN
    SELECT PROCESS_INS_OID,FLOW_INS_OID INTO TMP_PROCESSID,TMP_FLOWID FROM FLOW_INSTANCE WHERE eventid=:OLD.EVENTID and PROCESSID in ("PR010","PR011","PR012","PR013","PR026","PR027") and OWNER in ("00120000","00120008","HOGM0001","T2209") and status = 1
    and (SELECT cost_center FROM org_position WHERE org_code in (SELECT owner FROM FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq = 0 and eventid=:OLD.EVENTID))= "801" ;
   
    IF TMP_FLOWID IS NOT NULL THEN
        --UPDATEFLOWOWNER(TMP_PROCESSID,TMP_FLOWID);
        --UPDATE MSGTEST.FLOW_INSTANCE set OWNER="HOCE0001",REALOWNER="HOCE0001" WHERE PROCESS_INS_OID=:old.PROCESS_INS_OID AND FLOW_INS_OID=:old.FLOW_INS_OID;
        UPDATE MSGTEST.FLOW_INSTANCE set OWNER="HOCE0001",REALOWNER="HOCE0001" WHERE PROCESS_INS_OID=TMP_PROCESSID AND FLOW_INS_OID=TMP_FLOWID;
    END IF;
END;



------解决方案--------------------------------------------------------
引用
and (SELECT cost_center FROM MSGTEST.org_position WHERE org_code in   
11.    (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq = 0 and eventid:=old.eventid)) = "801" ;  

这个后面不是条件吗 不能这样用的 必须是xx=(select fjdlf from ……)这样的
------解决方案--------------------------------------------------------
SELECT PROCESS_INS_OID INTO TMPPROCESSID,FLOW_INS_OID INTO TMPFLOWID FROM FLOW_INSTANCE

有这种写法吗?应该是
 SELECT PROCESS_INS_OID ,FLOW_INS_OID INTO TMPPROCESSID,TMPFLOWID FROM FLOW_INSTANCE

------解决方案--------------------------------------------------------
改成
SELECT PROCESS_INS_OID ,FLOW_INS_OID INTO TMPPROCESSID,TMPFLOWID FROM FLOW_INSTANCE WHERE
    eventid:=old.eventid and PROCESSID in ("PR010","PR011","PR012","PR013","PR026","PR027") and OWNER in ("00120000","00120008","HOGM0001","T2209") and status = 1
    and exists (SELECT op.cost_center FROM MSGTEST.org_position op WHERE org_code in
    (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq=0 and eventid:=old.eventid) and op.cost_center="801") ;



------解决方案--------------------------------------------------------
引用
晕 刚刚剪贴到if判断那条更新语句就只有PL/SQL: ORA-00920: 无效的关系运算符和PL/SQL: SQL Statement ignored这2个错误了

貌似有几个错误。@@ <wbr>郁闷 <wbr>. <wbr>ORACLE的触发器报错请大家帮助,该怎么处理
------解决方案--------------------------------------------------------
改成
SELECT PROCESS_INS_OID ,FLOW_INS_OID INTO TMPPROCESSID,TMPFLOWID FROM FLOW_INSTANCE WHERE
    eventid:=old.eventid and PROCESSID in ("PR010","PR011","PR012","PR013","PR026","PR027") and OWNER in ("00120000","00120008","HOGM0001","T2209") and status = 1
    and exists (SELECT op.cost_center FROM MSGTEST.org_position op WHERE org_code in
    (SELECT owner FROM MSGTEST.FLOW_INSTANCE WHERE PROCESSID in ("PR013") and seq=0 and eventid:=old.eventid) and op.cost_center="801") ;


------解决方案--------------------------------------------------------
可参考:
sybase触发器转成oracle~大家帮忙~解决方法   http://www.myexception.cn/oracle-develop/57814.html


另这里的部分程序错误异常BUG解决方案

%D%A

java环境变量设置|http://www.myexception.cn/java-other/172921.html

%D%A

oracle存储过程|http://www.myexception.cn/oracle-develop/177537.html

sso cas 多数据源有关问题

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26136632/viewspace-1117059/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2011-08-05