在一个语句中执行此操作的要求是由于程序如何处理sql语句。 sql语句存储在另一个表的列中,并通过记录集上的open执行。如果语句中有分号,则open响应错误的无效字符。
场景:在某些情况下,我想更新数据库A中一条记录中的特定字段,并通过插入在日志表中记录该更改的事实。
以下是使用两个语句的示例:
update data_table a set field1='new value' where identifier=10;
insert into log_table (action_taken)
values('record ' || a.identifier || ' had field1 changed to ' || a.field1);
有没有办法做到这一点?
答案 0 :(得分:3)
将它们放在存储过程中并执行调用存储过程。
答案 1 :(得分:2)
我认为你正在寻找触发器。在不知道你正在使用什么数据库的情况下,我只能猜测。
以下是有关MySQL触发器的信息。
触发器绑定到表以启动特定事件,例如INSERT,UPDATE或DELETE。然后,触发器可以运行一个或多个SQL语句。
以下是您创建trigger
的方法答案 2 :(得分:0)
如果您使用java或.net这两个SQL API支持sql批处理命令,请对SGDB进行批量调用,您可以执行您已完成的操作。
update data_table a set field1='new value' where identifier=10;
GO
insert into log_table (action_taken)
values('record ' || a.identifier || ' had field1 changed to ' || a.field1);
GO
但是如果你要在同一时间同时完成这两项操作,你应该接受krefftc的回答,因为这是最好的方法
答案 3 :(得分:0)
如果您的数据库恰好是Oracle,那么如果由于某种原因您不能/不想创建存储过程,则可以使用匿名PL / SQL块:
BEGIN
update data_table a set field1='new value' where identifier=10;
insert into log_table (action_taken)
values('record ' || a.identifier || ' had field1 changed to ' || a.field1);
END;