创建触发器以插入到另一个表中

2024-01-05

我在执行下面的触发器时遇到一些问题:

CREATE OR REPLACE TRIGGER AFTERINSERTCREATEBILL
AFTER INSERT
ON READING
FOR EACH ROW 

DECLARE

varReadNo   Int;
varMeterID  Int;
varCustID   Varchar(10);

BEGIN 

SELECT SeqReadNo.CurrVal INTO varReadNo FROM DUAL;

Select MeterID INTO varMeterID
From Reading 
Where ReadNo = varReadNo;

Select CustID INTO varCustID
From Address A
Join Meter M 
on A.postCode = M.postCode
Where M.MeterID = varMeterID;

INSERT INTO BILL VALUES 
(SEQBILLNO.NEXTVAL, SYSDATE, 'UNPAID' , 100 , varCustID , SEQREADNO.CURRVAL); 

END;

错误信息:

*原因:触发器(或在中引用的用户定义的 plsql 函数) 该语句)试图查看(或修改)一个表 在被触发它的语句修改的过程中。

*操作:重写触发器(或函数),使其不读取该表。

这是否意味着我不应该从表 Reading 中检索任何详细信息?

我相信当我在插入值时从表读取中检索数据时会出现此问题:

SELECT SeqReadNo.CurrVal INTO varReadNo FROM DUAL;

Select MeterID INTO varMeterID
From Reading 
Where ReadNo = varReadNo; 

无论如何,有办法解决这个问题吗?或者有更好的方法来做到这一点吗?输入表 Reading 后,我需要在表 BILL 中插入一个新行,其中 ReadNo 需要引用我刚刚插入的 ReadNo。


您无法在行触发器中从同一表中检索记录。您可以使用 :new 和 :old 从实际记录中访问值(这是您的情况吗?)。然后触发器可以重写为

CREATE OR REPLACE TRIGGER AFTERINSERTCREATEBILL
AFTER INSERT
ON READING
FOR EACH ROW 

DECLARE

  varCustID   Varchar(10);

BEGIN 

  Select CustID INTO varCustID
    From Address A
    Join Meter M 
      on A.postCode = M.postCode
    Where M.MeterID = :new.MeterID;

  INSERT INTO BILL VALUES 
  (SEQBILLNO.NEXTVAL, SYSDATE, 'UNPAID' , 100 , varCustID , SEQREADNO.CURRVAL); 

END;

如果需要从 READING 表中查询其他记录,则必须使用语句触发器、行触发器和 PLSQL 集合的组合。很好的例子是AskTom.oracle.com http://asktom.oracle.com/pls/asktom/ASKTOM.download_file?p_file=6551198119097816936

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建触发器以插入到另一个表中 的相关文章

  • 在触发器中使用 OUTPUT/INTO 而不是插入触发器会使“插入”表无效

    我在使用带有替代插入触发器的表时遇到问题 我创建的表包含一个标识列 我需要在此表上使用而不是插入触发器 我还需要从触发器中查看新插入的标识的值 这需要在触发器中使用 OUTPUT INTO 问题是执行 INSERT 的客户端无法看到插入的值
  • C# 中强制关闭 oracle 连接

    我有一个报告窗口 显示从可能长时间运行的 Oracle 存储过程返回的结果 我的问题是 当用户关闭窗口时 与 Oracle 的连接保持打开状态 并且可能长时间运行的报告不会被取消 关闭打开的连接的唯一方法是 DBA 手动终止它们或用户退出整
  • SQL Server:我可以使用 EXEC 来运行外部应用程序吗?

    您好 感谢您抽出时间 我一直在网上到处搜索一个示例 其中 SQL 触发器将运行外部应用程序 但我没有运气 我所看到的是 EXEC 将执行 SQL 过程 我需要这个的原因是 我有一个包含许多表的 SQL Server 2010 当某些表上发生
  • 如何使用 oracle SQL 执行线性插值?

    我正在尝试使用 Oracle 11g 开发中为 11 1 生产中为 11 2 进行数值分析 特别是对具有三列感兴趣的表进行线性插值 时间戳 deviceid 和值 值列保存来自设备 具有 ID deviceid 的数据 这些数据是在时间戳中
  • 我的触发器是如何被删除的?

    如果你能弄清楚这一点 那么你就是一位真正的 SQL 大师 这是我见过的最奇怪的事情之一 我已向数据库中的表添加了一个触发器 服务器是 SQL 2008 触发器不会做任何特别棘手的事情 当某些字段发生更改时 只需更改表中的 LastUpdat
  • oracle查找两个表之间的差异

    我有两个结构相同的表 一个是临时的 另一个是产品的 每次都会加载整个数据集 有时该数据集会从先前的数据集中删除记录 我首先将数据集加载到临时表中 如果删除了任何记录 我也想从产品表中删除它们 那么如何找到prod中存在但temp中不存在的记
  • Oracle 11g XE - 突然出现 ORA-01034: ORACLE 不可用且 ORA-27101: 共享内存领域不存在

    Windows 7 32 位笔记本电脑 Oracle 11g XE 的本地实例 首先 在提出问题之前 我自己一直在研究这个问题 虽然有很多参考 建议 但我无法自己解决这个问题 突然 当我尝试登录本地 Oracle 11g XE 爱好者实例时
  • 我怎样才能等到所有调度程序作业完成?

    我是我的包裹 我正在排队多个作业 如下所示 dbms scheduler create job job name gt p job name job type gt PLSQL BLOCK job action gt p sql code
  • 在 Oracle 过程中实现多线程

    我正在研究 Oracle 10gR2 这是我的问题 我有一个程序 我们称之为 proc parent 在包内 应该调用另一个过程 让我们调用它 用户创建 我得打电话 用户创建 在一个循环中 它从表中读取一些列 并且这些列值作为参数传递给 用
  • WHERE IN 条件不接受字符串值

    我正在动态构造一个带有名称的字符串用户数据在 PL Sql 过程中通过附加用户名 单引号 和逗号 的形式 abc123 xyz456 pqr789 但是当我将此字符串传递给 SELECT 语句的 WHERE IN 条件时 SELECT FR
  • PL/SQL 过程成功完成但没有显示任何内容

    我有以下过程代码 create or replace PROCEDURE Ventas cliente p DNI IN CHAR IS CURSOR c pedidos clientes IS SELECT FROM Pedidos ve
  • Oracle 中的函数与过程

    Oracle 中函数和过程的主要区别是什么 如果我可以用函数完成所有事情 为什么我必须使用过程 如果我无法在sql语句中调用过程 好吧 我会编写一个函数来完成相同的工作 过程不返回值 好的 在任何 dml 操作后我将仅返回 sql rowc
  • 无法在 .NET 中加载 Oracle.DataAccess 的文件或程序集

    当我尝试运行一个简单的程序来访问 oracle 时 我收到此消息 无法加载文件或程序集 Oracle DataAccess 版本 2 111 7 20 文化 中性 PublicKeyToken 89b483f429c47342 或其依赖项之
  • 将 OraclePreparedStatement 与 DBCP 连接结合使用

    我正在尝试使用 dbcp 框架为我的 oracle 服务器创建一个连接池 我用过这个tutorial http web archive org web 20120615100115 http www freshblurbs com 80 j
  • 插入现有表时出现异常 ORA-00942: 表或视图不存在

    当尝试将一批行插入现有表时 我遇到了异常 ORA 00942 表或视图不存在 我可以确认该表存在于数据库中 并且我可以使用 oracle 将数据插入到该表中 sql 开发人员 但是当我尝试在java中使用preparedstatement插
  • TOAD 将 &String 视为绑定变量

    我正在使用 Oracle Data Integrator 开发一些 ETL 有时会使用 TOAD 测试部分代码 今天我遇到了 TOAD 的问题 我有一行像 AND column value like DEV PROD 当我尝试运行包含上面过
  • 替换 Oracle 包的一部分

    我需要修改包内的一个过程 我需要接触声明和实施 由于我正在维护每次修改的补丁文件 因此我希望更改最小化 我可以仅使用更改的过程更新包 如果是 如何更新 还是需要提供完整的包定义和实现 您需要替换整个包规范和主体 您不能仅对包的一部分进行操作
  • Oracle - 使用 DBMS_MVIEW.REFRESH 刷新“REFRESH FORCE ON DEMAND”视图时会发生什么

    我有以下物化视图 CREATE MATERIALIZED VIEW TESTRESULT ON PREBUILT TABLE WITH REDUCED PRECISION REFRESH FORCE ON DEMAND WITH PRIMA
  • Pivotal Cloud Foundry - 连接到外部 Oracle 数据库

    我正在创建一个 Spring boot 应用程序 该应用程序连接到一个不由 PCF 管理 或驻留在外部 的 Oracle 数据库 在我的本地开发环境中 我在 application properties 文件中配置了数据库连接详细信息 有人
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig

随机推荐

  • 在 Coldfusion 中使用 Unicode 字符解析 XML

    我正在使用 cfhttp 连接到外部 API 返回的数据为 XML 格式 我无法控制 API 或其返回的格式 当数据返回时 我循环遍历它并执行 cfquery 插入到我自己的 MySQL 数据库中 该数据库具有 UTF8 字符集 但是 某些
  • 如何获取已注册COM接口的IID?

    我知道我可以从注册表中的 COM 类对象读取 CLSIDClasses
  • 数据绑定到嵌套属性 - 无法绑定属性或列 (Winforms)

    我们正在使用 Windows 窗体运行 NET 4 0 应用程序 该应用程序对两种不同类型的对象使用单一表单 namespace NetIssue public partial class Form1 Form B myObj public
  • PowerShell 字符串插值语法

    我总是使用以下语法来确保变量在字符串中扩展 my string with a variable 我最近遇到了以下语法 my string with a variable 它们相等吗 有什么区别吗 tl dr Inside 只需要嵌入整个表达
  • ARM 上的快速浮点到整数转换和浮点精度 (iPhone 3GS/4)

    I read http www stereopsis com FPU html http www stereopsis com FPU html 中提到 在 x86 上将 float 转换为 int 的最快方法是什么 https stack
  • 扩展Python中的内置类

    如何扩展 python 中的内置类 我想向 str 类添加一个方法 我已经做了一些搜索 但我发现的只是较旧的帖子 我希望有人知道更新的内容 只需对类型进行子类化 gt gt gt class X str def my method self
  • 为什么 iPhone 请求 .m3u8 播放列表文件 4 次?

    为什么 iPhone 请求 m3u8 播放列表文件 4 次 并且 是否可以让它仅请求一次 请求执行如下 第一个是完整的请求 第二个是字节范围请求 范围为0 1 第三个是完整文件的另一个字节范围请求 最终的请求又是一个完整的请求 注意 iPh
  • 如何查看应用程序当前使用的堆大小?

    我想我在 NetBeans 中将堆大小增加到 1 GB 因为我将配置更改为如下所示 netbeans default options J Xmx1g 重新启动 NetBeans 后 我能否确定我的应用程序现在已获得 1 GB 空间 有没有办
  • 访问应用的外部脚本中的 buildscript 块中定义的类路径依赖项

    我最初的目标是能够使用中定义的类路径依赖项buildscript in build gradle 在导入的脚本内build gradle using apply from 但是 由于无法解析类 因此外部脚本无法编译 研究这个问题后 我发现逻
  • 我的 Flex 文件输出错误

    我编写了一个 l 文件并希望输出 c17 isc 中的内容 但有一个错误我不知道为什么 我已经给出了我打算读取的文件 flex文件和执行结果 这是 c17 isc 文件 内容的意思是 number gate name gate type o
  • 您可以使用 ffmpeg 流实时插入文件中的文本吗?

    我有这个代码 用于流式传输文件 并将视频某个时间的视频节目名称 name of show 放置在屏幕顶部 屏幕底部则显示节目名称来自 video title txt 并将其放置在屏幕底部 我想要做的是找到一种方法 每隔 1 或 2 分钟 提
  • 如何在 Sonata Media Bundle 中实现多对多关系

    我正在尝试将 SonataMediaBundle 与另一个实体相关联 Products具有多对多关系 架构和关系创建得很好 但是 当我编辑或创建新产品时 我尝试添加一个可以通过媒体库搜索媒体文件的按钮和一个上传新文件的按钮 对于 OneTo
  • 直接链接获取谷歌自定义搜索API密钥?

    我有一个 API 密钥 用于在 json 搜索 API 上进行 Google 自定义搜索查询 如下所示 我需要将客户端发送到一个 URL 每个客户端都可以在其中获取其域的自定义 API 密钥 但是 我不记得用于获取 API 密钥的 URL
  • JavaScript、Node.js:Array.forEach 是异步的吗?

    我有一个关于本地人的问题Array forEachJavaScript 的实现 它的行为是异步的吗 例如 如果我打电话 many many elements forEach function lots of work to do 这会是非阻
  • 在 Mathematica 中使用 $NewSymbol 移动上下文

    我正在玩 NewSymbol试图找到答案这个问题 https stackoverflow com q 6165977 421225 with 文档说 http reference wolfram com mathematica ref 24
  • iOS 上的 javascript 除了在其框架内执行之外,是否还必须由 WebKit 框架下载?

    协议是这样说的 3 3 2 内部使用应用程序不得下载或安装可执行代码 如果所有脚本 代码和解释器都打包在应用程序中并且未下载 则解释的代码只能在应用程序中使用 上述唯一的例外是由 Apple 内置 WebKit 框架下载和运行的脚本和代码
  • TensorFlow 2.0:如何更新张量?

    在 TensorFlow 1 x 中 要更新张量 我会使用tf scatter update 仅更新张量的相关部分 我们如何在 TF 2 0 中做同样的事情 您可以使用tf tensor scatter nd update https ww
  • 在文本中查找相关单词的算法

    我想要一个单词 例如 Apple 并处理一个文本 或者可能更多 我想提出相关术语 例如 处理 Apple 的文档并发现 iPod iPhone Mac 是与 苹果 相关的术语 关于如何解决这个问题有什么想法吗 作为起点 您的问题涉及文本挖掘
  • 如何在C中打印方阵的所有方子矩阵?

    请帮我用C编程语言找到并打印从大到小方阵的所有方阵子矩阵 我写的代码运行错误 int main int mtrx size 8 int mat 8 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
  • 创建触发器以插入到另一个表中

    我在执行下面的触发器时遇到一些问题 CREATE OR REPLACE TRIGGER AFTERINSERTCREATEBILL AFTER INSERT ON READING FOR EACH ROW DECLARE varReadNo