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 写道
是啊 在找 我对这个不熟悉......
------------------------------------------------------------------------------------------------------------------
问题补充:
AngelAndAngel 写道
引用
晕 刚刚剪贴到if判断那条更新语句就只有PL/SQL: ORA-00920:
无效的关系运算符和PL/SQL: SQL Statement ignored这2个错误了
貌似有几个错误。
![@@ <wbr>郁闷 <wbr>. <wbr>ORACLE的触发器报错请大家帮助,该怎么处理 @@ <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的触发器报错请大家帮助,该怎么处理 @@ <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 多数据源有关问题