在 Oracle 中导致错误的 SQL 插入语句

Posted

技术标签:

【中文标题】在 Oracle 中导致错误的 SQL 插入语句【英文标题】:SQL Insert Statement causing error in Oracle 【发布时间】:2019-12-12 02:02:00 【问题描述】:

我正在尝试这样做

INSERT INTO INSPECTIONOFFICE (INSPOFFICE_ID, INSPOFFICE_NAME, INSPOFFICE_STREET, INSPOFFICE_CITY, INSPOFFICE_STATE, INSPOFFICE_ZIPCODE, INSPOFFICE_CONTPERSONFNAME, INSPOFFICE_CONTPERSONLNAME, INSPOFFICE_CONTPERSONPHONE, INSPOFFICE_CONTPERSONEMAIL)
VALUES (12, 'InspectionOffice1', '121 Ames st', 'Omaha', 'NE', 68128, 'Brad', 'Foley', '4022853487', 'BradFoley@gmail.com');

但我得到一个错误

从第 22 行开始的错误命令 - 插入 INSPECTIONOFFICE(INSPOFFICE_ID、INSPOFFICE_NAME、INSPOFFICE_STREET、INSPOFFICE_CITY、INSPOFFICE_STATE、INSPOFFICE_ZIPCODE、INSPOFFICE_CONTPERSONFNAME、INSPOFFICE_CONTPERSONLNAME、INSPOFFICE_CONTPERSONPHONE、INSPOFFICE_CONTPERSONEMAIL) 值(12,'InspectionOffice1','121 Ames st','Omaha','NE',68128,'Brad','Foley','4022853487','BradFoley@gmail.com') 命令行错误:22 列:13 错误报告 - SQL 错误:ORA-04098:触发器“JMEEK.INSPECTIONOFFICE_INSPECTIONOFF”无效且重新验证失败 04098. 00000 - “触发器 '%s.%s' 无效并且重新验证失败” *原因:尝试检索触发器以执行,但发现该触发器无效。这也意味着触发器的编译/授权失败。 *Action:选项是解决编译/授权错误、禁用触发器或删除触发器。

知道如何解决这个问题吗?

【问题讨论】:

对不起,我对 sql 很陌生,这是什么意思? 看起来在表上写了一个用于插入事件的触发器。每当事件发生时都会执行触发器,在这种情况下它是插入事件。 tutorialspoint.com/plsql/plsql_triggers.htm 当您执行此插入查询时,将执行触发器并且触发器中的逻辑未通过验证。这就是您看到此错误的原因。 【参考方案1】:

您似乎没有权限访问触发器 JMEEK.INSPECTIONOFFICE_INSPECTIONOFF

或者有一些编译问题...

你应该看看触发器。

或者,如果您不知道触发器是什么,请致电有经验的工作的队友。 :)

顺便说一句,如果你是一个人,也没关系..你可以禁用/放下触发器..

此命令禁用,您可以稍后启用

ALTER TRIGGER JMEEK.INSPECTIONOFFICE_INSPECTIONOFF DISABLE;

这个命令删除触发器,你将永远失去它(如果你没有备份)

drop trigger JMEEK.INSPECTIONOFFICE_INSPECTIONOFF;

【讨论】:

【参考方案2】:

触发器JMEEK.INSPECTIONOFFICE_INSPECTIONOFF,我猜是你写的,因为它在JMEEK 模式中,(我再次猜测)似乎是你的,是无效的,这意味着它有编译错误。要找出这些错误是什么,您应该执行查询

SELECT *
  FROM ALL_ERRORS
  WHERE OWNER = 'JMEEK' AND
        NAME = 'INSPECTIONOFFICE_INSPECTIONOFF'
  ORDER BY SEQUENCE

我们没有人能为您做很多其他事情,因为我们不知道这个触发器是什么样的。如果您需要查看源代码,可以执行以下查询:

SELECT LINE, TEXT
  FROM ALL_SOURCE
  WHERE OWNER = 'JMEEK' AND
        NAME = 'INSPECTIONOFFICE_INSPECTIONOFF'
  ORDER BY LINE

或者您可以使用诸如 Oracle 的免费 SQL Developer 产品之类的 IDE,这将使您轻松完成这一切。

【讨论】:

以上是关于在 Oracle 中导致错误的 SQL 插入语句的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 在 SQL Management Studio 中导致错误

在 SQL Server 2012 中作为 Varbinary(MAX) 的照片在 Access 2010 中导致错误 502753

oracle中怎么获得sql语句的错误信息

突遇mysql 5.7中导致SQL执行结果出错的严重bug

oracle数据库中怎么能避免相同的数据插入数据库多遍?sql语句怎么处理呢?

如何通过sql的insert语句插入大量字符串到oracle的clob字段?