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做,谢谢。

4

3 回答 3

3

这是一个“条件插入”。

MAPPING_TBL如果该记录在表中尚不存在,则该语句将用户提供的记录插入到表中。在 MySQL 中,这是通过“INSERT IGNORE”完成的。在当代甲骨文中,可以使用“MERGE INTO”来达到同样的效果。

SELECT :G_ID AS G_ID ... FROM DUAL是一种指定值元组的方法,在这种情况下,来自调用程序的参数化值。(例如,如果您从 DUAL 中选择 1、2、3、4,您将连续获得这些值。在这种情况下,调用程序在查询执行时提供 :G_ID 等。)

于 2012-10-09T02:03:39.337 回答
0

它只是一种INSERT INTO...SELECT语句的语法。为了使其更简单,请看下面的示例

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

它的作用是,将ed onSELECT编辑的任何行。table2INSERTtable1

有关详细信息,请参阅:Oracle [插入...选择]

于 2012-10-09T02:00:16.030 回答
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 回答