如果列包含然后回滚,则插入存储过程

时间:2015-01-20 20:38:20

标签: sql

我有一个存储过程,其中数据被插入到表中,但是只允许插入某些数据。如果某列包含某些字符(例如:xyz)?

,如何回滚/取消sp

2 个答案:

答案 0 :(得分:1)

客户端应用程序比存储过程内部更好地处理

COMMITROLLBACK。唯一的例外是,如果您的DBMS支持回滚到过程中定义的保存点。

对于插入数据的存储过程,您可以INSERT使用SELECT子句的WHERE语句的结果来指定数据验证条件。如果您正在评估和插入多行,这种方法不需要循环结构。

INSERT INTO targetTable ( col1, col2, col3, ...)
   SELECT 
       f1, f2, f3, ... 
   FROM 
       someTableOrJoinOrExpression
   WHERE 
       someColumn NOT LIKE '%xyz%' 
       AND ...

答案 1 :(得分:0)

您可以使用FOR循环仅插入需要的值。 声明

begin

for i in (select * from table1) loop
if i.field1 != 'xyz' then
   insert into table2 
   values (i.field1,....,field10)
else
  //You can do any other action 
end if;

end loop;
commit;
end;

最好只存储您需要的记录,而不是插入和删除。 只有确保你的条件在" IF"让我们只传递你需要的记录