2
INSERT INTO MAPPING_TBL ( G_ID, MR_ID, G_TYPE, G_NUMBER ) 
SELECT :G_ID AS G_ID, :MR_ID AS MR_ID, :G_TYPE AS G_TYPE, :G_NUMBER AS G_NUMBER 
FROM DUAL WHERE NOT EXISTS 
         (SELECT G_ID, MR_ID, G_TYPE, G_NUMBER 
          FROM MAPPING_TBL 
          WHERE G_ID = :G_ID2 AND 
                MR_ID = :MR_ID2 AND 
                G_TYPE = :G_TYPE2 AND 
                G_NUMBER = :G_NUMBER2 )

誰かがこのSQLが実際に何をしているのか説明できますか?特にこれは何ですか

SELECT :G_ID AS G_ID, :MR_ID AS MR_ID, :G_TYPE AS G_TYPE, :G_NUMBER AS G_NUMBER 
FROM DUAL

sql do、ありがとう。

4

3 に答える 3

3

これは「条件付き挿入」です。

MAPPING_TBLそのレコードがテーブルにまだ存在しない場合、ステートメントはユーザー指定のレコードをテーブルに挿入します。MySQLでは、これは「INSERTIGNORE」として実行されます。現代のOracleでは、「MERGEINTO」を使用して同じ効果を得ることができます。

これSELECT :G_ID AS G_ID ... FROM DUALは、値のタプル(この場合は呼び出し側プログラムからのパラメーター化された値)を指定する方法です。(たとえば、SELECTED 1、2、3、4 FROM DUALの場合、これらの値が連続して返されます。この場合、呼び出し側プログラムはクエリ実行時に:G_IDなどを提供します。)

于 2012-10-09T02:03:39.337 に答える
0
SELECT :G_ID AS G_ID, :MR_ID AS MR_ID, :G_TYPE AS G_TYPE, :G_NUMBER AS G_NUMBER 
FROM DUAL

セミコロンは、ユーザーがこれらの値を入力するように求められることを意味します。これらは、実行時に入力されることが期待されるパラメーターのようなものです。

于 2012-10-09T02:01:43.080 に答える
0

それは単なるINSERT INTO...SELECTステートメントの構文です。より簡単にするために、以下の例を見てください

INSERT INTO table1 (colA, colB, colC)
SELECT colA, colB, colC
FROM table2

SELECTそれが何をするかというと、編集元の行が何であれ、編集されtable2ます。INSERTtable1

詳細については、Oracle [INSERT INTO...SELECT]を参照してください。

于 2012-10-09T02:00:16.030 に答える