-1

我试图一次触发两个插入语句。实际上我已经尝试过下面的查询,但它只插入一个表中。

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 表中。我会错过什么。如果有人知道,请帮助我。

4

2 回答 2

0

您的整个代码似乎不正确:

  1. 为什么是动态sql?
  2. 有很多语法错误
    • 未封闭的“如果”(正如 vj shah 评论的那样)
    • 缺少returning关键字
  3. bulk collect如果您只从插入一行返回,为什么需要?
  4. 第二个“如果”是什么意思?

等等...

无论如何,这段代码有效:

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;
于 2012-07-03T08:30:41.640 回答
0

你能更好地解释你的问题吗?你的逻辑和你展示的数据都不能说明你想要完成什么。(if 背后的逻辑)。

这也不是功能代码(语法错误太多),您可以使用您正在触发的真实代码进行更新吗?可能只是更改表名?

如果您想确保两个语句都成功完成或都回滚,那么将它们包含在块中的方法是正确的。

SQL> create table test_rc_2(
  2    id number
  3  );

Table created.

--Sample 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

--case 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
于 2012-07-03T19:48:06.343 回答