第 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

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 或列规范