第 3 行错误:PL/SQL: ORA-01747: 无效的 user.table.column、table.column 或列规范
Posted
技术标签:
【中文标题】第 3 行错误:PL/SQL: ORA-01747: 无效的 user.table.column、table.column 或列规范【英文标题】:Error at line 3: PL/SQL: ORA-01747: invalid user.table.column, table.column, or column specification 【发布时间】:2015-12-06 09:27:23 【问题描述】:您好,我在 oracle 中编写了一个 sql 脚本。
CREATE OR REPLACE TRIGGER TIPUSUPDATE
AFTER UPDATE OF RENDSZAM, MODELL
ON AUTO
FOR EACH ROW
BEGIN
UPDATE TIPUS
SET TIPUS.RENDSZAM = :NEW.RENDSZAM,
SET TIPUS.MODELL = :NEW.MODELL
WHERE TIPUS.RENDSZAM = :OLD.RENDSZAM
AND TIPUS.MODELL = :OLD.MODELL;
END;
我创建了表格,但是当我运行此脚本时,我收到一条错误消息:
第 3 行出错:PL/SQL: ORA-01747: 无效的 user.table.column、table.column 或列规范。
有人可以帮帮我吗?
【问题讨论】:
好吧,一方面,set
语句中不能有 2 个 set
子句。
【参考方案1】:
我尝试了以下操作,它正在工作。就像 sstan 前面提到的那样,更新语句中不能有 2 个 set 子句。确保在执行以下操作之前创建表 AUTO 和 TIPUS
CREATE OR REPLACE TRIGGER TIPUSUPDATE
AFTER UPDATE OF RENDSZAM, MODELL ON AUTO
FOR EACH ROW
BEGIN
UPDATE TIPUS
SET TIPUS.RENDSZAM = :NEW.RENDSZAM,
TIPUS.MODELL = :NEW.MODELL
WHERE TIPUS.RENDSZAM = :OLD.RENDSZAM
AND TIPUS.MODELL = :OLD.MODELL;
END;
/
【讨论】:
【参考方案2】:始终记得在调用您的表之前添加 SCHEMA NAME 前缀。
CREATE OR REPLACE TRIGGER <schema_name>.TIPUSUPDATE
AFTER UPDATE OF RENDSZAM, MODELL
ON <schema_name>.AUTO
FOR EACH ROW
BEGIN
UPDATE <schema_name>.TIPUS
SET TIPUS.RENDSZAM = :NEW.RENDSZAM,
TIPUS.MODELL = :NEW.MODELL
WHERE TIPUS.RENDSZAM = :OLD.RENDSZAM
AND TIPUS.MODELL = :OLD.MODELL;
END;
【讨论】:
为什么你认为这是一个命名问题?以上是关于第 3 行错误:PL/SQL: ORA-01747: 无效的 user.table.column、table.column 或列规范的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLSyntaxErrorException: ORA-01747
java.sql.SQLException: ORA-01747: user.table.column, table.column 或列说明
ORA-01747: user.table.column, table.column 或列说明无效 异常解决方法总结
ORA-06550:第 1 行,第 13 列:PLS-00382:表达式类型错误 ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略
org.hibernate.exception.SQLGrammarException:ORA-01747:无效的 user.table.column、table.column 或列规范