2012-10-09 206 views
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?特别是这是什么这是什么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做,谢谢。

+2

如果你以可读的方式格式化它可能会有所帮助。 – Kevin

回答

3

这是一个“条件插入”。

该声明是将用户提供的记录插入表中MAPPING_TBL如果该记录不存在于表中。在MySQL中,这是作为'INSERT IGNORE'完成的。在当代的Oracle中,人们可以使用'MERGE INTO'来达到同样的效果。

SELECT :G_ID AS G_ID ... FROM DUAL是一种指定值的元组的方法,在这种情况下,调用程序的参数化值。 (例如,如果您选择了1,2,3,4 FROM DUAL,则会将这些值重新排成一行,在这种情况下,调用程序在查询执行时提供:G_ID等。)

+0

明白了,谢谢。 – user1730361

0

这只是语句INSERT INTO...SELECT的语法。为了使它更简单,采取下列

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

这个例子中它的作用是,对不同于table2SELECT版无论行会INSERT版上table1

See for more info: Oracle [INSERT INTO...SELECT]

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

分号意味着用户将被提示输入这些值。它们就像预计在运行时填充的参数