我有一个oracle触发器,需要将更新后的表中的值复制到另一个表中。
问题是在创建触发器时不知道列。该系统的一部分允许应用程序更新表模式。 (不要问)。
基本上我想做的是将表转移到另一个表。
我有一个存储过程可以执行数据透视,但是我无法将其作为触发器的一部分来调用,因为它会对正在更新的表执行select操作。导致"变异"错误。
最理想的是创建一个动态脚本,从更新的表中读取Error: user admin not allowed to access it : grunt-cli
npm ERR! at RegClient.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:308:14)
npm ERR! at Request._callback (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:246:65)
npm ERR! at Request.self.callback (/usr/lib/node_modules/npm/node_modules/request/request.js:236:22)
npm ERR! at Request.emit (events.js:98:17)
npm ERR! at Request.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/request.js:1142:14)
npm ERR! at Request.emit (events.js:117:20)
npm ERR! at IncomingMessage.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/request.js:1096:12)
npm ERR! at IncomingMessage.emit (events.js:117:20)
npm ERR! at _stream_readable.js:944:16
npm ERR! at process._tickCallback (node.js:448:13)
npm ERR! If you need help, you may report this *entire* log,
npm ERR! including the npm and node versions, at:
npm ERR! <http://github.com/npm/npm/issues>
npm ERR! System Linux 2.6.32-504.el6.x86_64
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "-g" "grunt-cli"
npm ERR! cwd /root
npm ERR! node -v v0.10.40
npm ERR! npm -v 1.4.28
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /root/npm-debug.log
npm ERR! not ok code 0
的所有列名,并从user_tab_cols
对象中读取值。
但当然......我不能......
:new
在动态脚本执行时不存在。所以像下面这样的东西会失败:
:NEW
所以,我被困了。
我无法从已更新的表格中读取,但我无法读取从EXECUTE IMMEDIATE `insert into pivotTable values(:NEW.' || variableWithColumnName ||')';
对象更新的值。
除了每次更改架构时重建触发器之外,还有其它方法可以实现吗?
答案 0 :(得分:2)
没有。每当表格发生变化时,您都需要重建触发器。
如果您想真正参与进来,可以通过阅读CREATE OR REPLACE
编写一个动态生成DDL到user_tab_columns
触发器的过程。然后,您可以创建一个在更改表时触发的DDL触发器,通过调用重新创建触发器的过程的dbms_job
提交作业。这是有效的,但它是一个相当大的移动部件,这意味着它可以以各种微妙和壮观的方式失败,特别是如果正在进行架构更改的应用程序决定在一天中间添加列