我试图一次触发两个插入语句。实际上我已尝试过以下查询,但只插入一个表。
EXECUTE IMMEDIATE 'select * from abc.test where test_NAME = ''aaa''' BULK COLLECT INTO T_SC;
IF T_SC.count = 0 THEN
Insert into abc.test (test_ID,test_NAME,status)
VALUES(1,'aaa','a') BULK COLLECT INTO insert_cnt;
IF insert_cnt.count = 1 THEN
INSERT INTO abc.test1(test1_id,test1_NAME,test1_ALIAS,test_ID)
VALUES(1,'bbb','b',1);
COMMIT;
END IF;
它只是插入abc.test1表...我将丢失什么。如果有人知道,请plz帮助我。
答案 0 :(得分:0)
你的整个代码似乎不对:
returning
关键字bulk collect
?依旧......
无论如何,这段代码有效:
EXECUTE IMMEDIATE 'select * from abc.test where test_NAME = ''aaa''' BULK COLLECT INTO T_SC;
/* BTW, why not
select * bulk collect into T_SC from abc.test where test_NAME = 'aaa';
*/
IF T_SC.count = 0 THEN
Insert into abc.test (test_ID, test_NAME, status)
VALUES(1,'aaa','a') returning test_ID, test_NAME, status BULK COLLECT INTO insert_cnt;
IF insert_cnt.count = 1 THEN
INSERT INTO abc.test1(test1_id,test1_NAME,test1_ALIAS,test_ID)
VALUES(1,'bbb','b',1);
END IF;
COMMIT;
END IF;
答案 1 :(得分:0)
你能解释一下你的问题吗?您的逻辑和您显示的数据都不会让您知道您要完成的任务。 (if背后的逻辑)。
这也不是功能代码(语法错误太多),您可以使用您正在触发的实际代码进行更新吗?可能只是更改表名?
如果要确保两个语句都成功完成或两个语句都回滚,那么将它们包含在块中的方法是正确的。
SQL> create table test_rc_2(
2 id number
3 );
Table created.
- 示例1:单独提交插入(仅滚动最新语句
SQL> insert into test_rc_2 values (100);
1 row created.
SQL> insert into test_rc_2 values ('hello');
insert into test_rc_2 values ('hello')
*
ERROR at line 1:
ORA-01722: invalid number
SQL> commit;
Commit complete.
SQL> select * from test_rc_2;
ID
----------
100
- 案例2:在一个区块中提交他们。
SQL> truncate table test_rc_2
2 ;
Table truncated.
SQL> begin
2 insert into test_rc_2 values(100);
3 insert into test_rc_2 values('hello..');
4 end;
5 /
begin
*
ERROR at line 1:
ORA-01722: invalid number
ORA-06512: at line 3
SQL> commit;
Commit complete.
SQL> select * from test_rc_2;
no rows selected