使用触发器更改插入的值

2023-11-25

我几周前才开始学习 SQL,我正在尝试制作一个触发器,如果​​插入的值小于 10,则将其更改为 10。我现在搜索了 4h,找到了很多答案,但没有很好(对我来说)。我实在不明白问题出在哪里。 这是代码:

CREATE OR REPLACE TRIGGER NumberOfBooks
BEFORE INSERT
ON Book
FOR EACH ROW
BEGIN 
  IF new.nobook < 10
  THEN
    SET new.nobook = 10;
  END IF;
  END;

在 Oracle 的触发器语法中,新插入的记录由:new, not new(注意冒号)。此外,SET是更新语句的一部分,不是设置字段值的方法 - 这些是通过简单的赋值完成的,但请注意,这些是通过:=而不是=.
所以,你的触发器应该是:

CREATE OR REPLACE TRIGGER NumberOfBooks
    BEFORE INSERT
    ON book
    FOR EACH ROW
BEGIN
    IF :new.nobook < 10
    THEN
        :new.nobook := 10;
    END IF;
END;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用触发器更改插入的值 的相关文章

  • 从函数内的 SELECT 返回一个变量

    我正在尝试创建一个返回 varchar 的函数 其中一个字段形成一个选择 即聚合字段 我收到下一个错误 ORA 01422 exact fetch returns more than requested number of rows 我的理
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 通知设置的数据库设计

    用户可以打开或关闭 他的通知设置 帐户 用于通知 例如 更改帐户资料信息 收到新消息等 通知可以通过电子邮件或手机 推送或短信 发送 用户可以只有 1 封电子邮件和多个手机设备 有什么方法可以改进以下数据库设计或者您会采取不同的方式吗 让我
  • SQL 按 IN 子句中的元素排序

    我有一个ITEM表 我想返回按 IN 子句中通知的相同顺序排序的结果 这些 ID 由用户告知 今天我有这个 SELECT FROM ITEM WHERE ITEM ID IN 45 2 671 6 ORDER BY CASE ITEM ID
  • 如何通过代码确定Oracle数据类型的字符串值?

    I use DBMS SQL DESCRIBE COLUMNS过程来确定 SELECT 查询的结果集中的列使用什么数据类型 但不幸的是这样我只能得到Oracle数据类型的代码 record col type 1 8 12 等 所以我想知道
  • 发布Oracle和SQL Server性能测试是否违反许可? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对Oracle和SQL Server中的空间索引进行性能测试 我想将其纳入我的理学硕士工作中 发布此类结果是否违反 dbms 的许可 也许有人已经
  • sql - oracle - 选择特定组/sku的第一条和最后一条记录

    我一直在尝试寻找答案 但没有成功 需要得到 首次购买的价格和最后一次购买的价格并按 SKU 分组 查询结果应该是这样的 sku first purchase price Last purchase price BC123 3 09 6 68
  • 如何使用 tnsname 从 Ant 连接到 Oracle 数据库?

    我正在寻找类似于 Ant sql 任务的东西 但它将接受以下格式的 JDBC url jdbc oracle thin TNS NAME 一种可能的方法似乎是编写我自己的 Ant 任务 该任务使用 OracleDataSource 来创建连
  • 关闭连接时 JDBC 事务回滚失败

    如果在提交期间与数据库资源的连接丢失 这可能会导致提交失败 然后回滚失败 是否有可能事务已部分提交 这似乎发生在我的案例中 但希望社区能更清楚地说明这一点 HibernateTransactionManager 和 Oracle 与 JDB
  • Oracle - 如何向用户授予对另一个用户的对象的权限

    我需要授予用户 TARGETUSER 选择 插入 更新用户 SOURCEUSER 的所有表的权限 我可以从here https stackoverflow com questions 187886 grant select on all t
  • 如何从 pl sql 过程运行 sql 脚本

    我有一个类似的程序 CREATE OR REPLACE PROCEDURE test is BEGIN DBMS OUTPUT PUT LINE This is a Test END 我想运行一些存储在当前目录中的sql脚本 我可以使用 s
  • 金钱计算,Java 和 Oracle/PL SQL 的使用比较

    大家可以对 Oracle PL SQL 和 Java 在处理货币计算时的优缺点进行很好的比较 如果您要开发一个需要处理大量资金计算的应用程序 您会使用这两者中的哪一个 为什么 这个问题并不是要引发oracle pl sql和java爱好者之
  • SQL查询获取列的精度值

    我需要一个 SQL 查询来获取某些列的精度值 我主要关心十进制类型列 并且我需要相同的精度值 我意识到在某些版本和数据库服务器供应商中可以这样做 如果您能列出其中的一些 那就太好了 对于 SQL 服务器 select precision f
  • Oracle数据库中的自增主键

    我想在 SQL Server 的列中实现标识或自动递增值 CREATE TABLE RollingStock Id NUMBER IDENTITY 1 1 Name Varchar2 80 NOT NULL 如何才能做到这一点 正如 Orb
  • 执行计划中是否考虑了功能?

    当查询在 SELECT 或 WHERE 子句中包含 PL SQL 函数 用户定义函数 时 如何生成执行计划 它是否也计算这些函数的成本并将其显示在执行计划中 或者这些函数只是被忽略 在此先感谢您的帮助 用户生成的函数在 SELECT 或 W
  • oracle中有没有相当于sp_getapplock、sp_releaseapplock的

    我需要能够在 Oracle 中的会话级别 事务范围之外 使用自定义锁 在 MSSQL 中 我使用 sp getapplock sp releaseapplock 如何在 Oracle 中实现相同的功能 DBMS LOCK 包 这将做你想做的
  • 如何查看所有者是否有权在 Oracle 中执行存储过程

    我需要验证我的所有者是否有权执行存储过程 但我必须在 sys 表上进行搜索 我可以在哪个表中找到它 谢谢你 与它的名称相反 DBA TAB PRIVS 允许我们查看所有对象的授予权限 而不仅仅是表 select from DBA TAB P
  • 函数参数的自定义惰性求值/短路的语法

    Oracle 定义了几种结构 这些结构利用了看似惰性求值但实际上是短路的功能 例如 x case when 1 2 then count all prime numbers below 100000000 else 2 2 end 函数 c
  • 有没有办法将应用程序上下文与非 Sybase DB 服务器中的数据库连接进行通信(类似于 Sybase 中的 set_appcontext)?

    Sybase 有一种让应用程序进行通信的方法 上下文 数据 http manuals sybase com onlinebooks group as asg1250e sag Generic BookTextView 38861 hf 0
  • 如何在不使用 DESCRIBE 命令的情况下描述 Oracle 中的表?

    我在上一门课时遇到了困难 我们需要编写一个 Oracle 脚本 其作用就像 DESCRIBE 命令一样 我们正在使用的这本书对如何使用数据字典的描述非常糟糕 不是寻找答案 而是寻找正确的方向 您正在寻找USER TAB COLUMNS ht

随机推荐