如何将两个oracle插入语句一起解雇?Oracle 11g

时间:2012-07-03 04:56:26

标签: oracle insert oracle11g

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

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帮助我。

2 个答案:

答案 0 :(得分:0)

你的整个代码似乎不对:

  1. 为什么动态sql?
  2. 有很多语法错误
    • unclosed“if”(如vj shah所评论)
    • 缺少returning关键字
  3. 如果从插页中只返回一行,为什么还需要bulk collect
  4. 第二个“if”是什么?
  5. 依旧......

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

    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