设置trigger遇到问题

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

obclient(root@sys)[ECommerceSys]> create trigger cal_sub_upd
→ before update on orderitems
→ referencing NEW as nrow
→ for each row
→ when (nrow.ProductID <> OLD.ProductID or nrow.Quantity <> OLD.Quantity or NEW.NEED_RECALCULATE = true)
→ begin
→ select Price into nrow.subtotal
→ from Products
→ where ProductID = nrow.productID;
→ set nrow.subtotal = nrow.subtotal * nrow.Quantity;
→ set nrow.NEED_RECALCULATE=false;
→ end$$
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near ‘referencing’ at line 3
referencing语句报错;去掉referencing语句后when报错。但是 (https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000221226)中没有说不可以这样做?

根因分析场景: SQL 执行出错
根因分析命令: obdiag rca run --scene=sql_execution_error --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”
日志采集场景: SQL执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

推荐您使用 obdiag 工具进行根因分析和日志采集,以便我们能够更准确地定位问题。上述命令将帮助我们收集与 SQL 执行错误相关的详细信息。

麻烦您提供一些信息以便我们更好地帮助您:

  1. 您当前使用的 OceanBase 数据库版本是什么?
  2. 能否提供完整的触发器创建语句(请隐藏敏感信息)?
  3. 是否在其他环境中测试过相同的触发器定义,结果如何?
  4. 您是否查阅过对应版本的 OceanBase 文档,确认语法是否支持 REFERENCINGWHEN 子句?
  5. 报错时是否有其他相关日志或上下文信息可以提供?

附上敏捷诊断工具 obdiag 使用帮助链接

请参考下面的语法

触发器的创建

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013827

1 个赞

学习一下