-1

一度に2つの挿入ステートメントを実行しようとしています。実際、私は以下のクエリで試しましたが、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テーブルに挿入しているだけです..私が行方不明にしようとしているもの。誰かがplzより知っているならこれで私を助けてください。

4

2 に答える 2

0

あなたのこのコード全体は正しくないようです:

  1. なぜ動的SQLですか?
  2. 構文エラーが多い
    • 閉じられていない "if" (vj シャーがコメントしたように)
    • returningキーワードがありません
  3. 挿入から1行だけ戻った場合、なぜ必要なのbulk collectですか?
  4. 2番目の「if」は何ですか?

等々...

とにかく、このコードは機能します:

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.

--サンプル 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 に答える