触发器中新行上的 Lob 定位器

Posted

技术标签:

【中文标题】触发器中新行上的 Lob 定位器【英文标题】:Lob locator on new row in a trigger 【发布时间】:2013-01-23 08:55:51 【问题描述】:

我正在尝试创建一个触发器,它将表 B 中的 blob 复制到表 A 中新创建的行中。但是,当应该执行触发器时,我收到错误 ORA-22275 (Invalid lob locator specified)。我可以想象我访问新行的 blob 的方式不是正确的方式,有人能指出我正确的方向吗?

触发器代码:

CREATE OR REPLACE TRIGGER COPY_BLOB
BEFORE INSERT ON TABLE_A
FOR EACH ROW
DECLARE
  src blob;
BEGIN
     SELECT bytes INTO src FROM table_b WHERE id = :new.ref_id; 
     DBMS_LOB.COPY(:new.bytes, src, DBMS_LOB.GETLENGTH(src), 1, 1);
END;
/

【问题讨论】:

【参考方案1】:

您的触发器应该是:

SELECT bytes 
  INTO :new.bytes 
  FROM table_b 
 WHERE id = :new.ref_id;

根本不需要使用 DBMS_LOB 包。

【讨论】:

谢谢您,您的声明有效。速度上有区别吗? select 语句或DMBS COPY 更快吗? @Teinacher 选择会更快(oracle 会为您复制封面下的 lob)

以上是关于触发器中新行上的 Lob 定位器的主要内容,如果未能解决你的问题,请参考以下文章

Outlook 收到新电子邮件后,触发器未在主题行上触发

在插入触发器之后修改一列并更新 Oracle 中新插入的行值

oracle触发器在表中插入新行时更新新的视图行

SQL Server 触发器 - 一个失败一个没有

如何调整oracle中的sql语句输入的最大长度

React - 在表格行上触发点击事件并在另一个页面中显示所选行的详细信息