如果不存在列,则DB2 Create Table

时间:2014-12-26 20:23:28

标签: sql db2

如何测试DB2中是否存在某些列是最简单的方法? 我只是想运行一个添加列的脚本。我不想要一个程序。 是否必须使用Begin End或创建程序?

IF (NOT EXISTS(
SELECT * FROM P1ADM549.T549RMOP WHERE VR_PGO ='VR_PGO' AND COLNAME = 'VR_PGO'))
THEN
    EXECUTE something...
END

4 个答案:

答案 0 :(得分:1)

AFAIK,你不能在普通的SQL中使用IF .. ELSE构造;您必须在存储的例程(过程或函数)中包含IF .. ELSE条件。

在您的情况下,如果EXECUTE something部分用于执行SQL查询,则可能您可以在NOT EXISTS条件中使用WHERE。像下面这样的东西,但需要你最后的澄清。

your_select_query
where not exists
(
SELECT 1 
FROM P1ADM549.T549RMOP 
WHERE VR_PGO ='VR_PGO' 
AND COLNAME = 'VR_PGO')

答案 1 :(得分:1)

您可以使用“吞下”42711的继续处理程序:

#> db2 "create table t1 ( x int )"
DB20000I  The SQL command completed successfully.

#> db2 "begin DECLARE CONTINUE HANDLER FOR SQLSTATE '42711' BEGIN END; EXECUTE IMMEDIATE 'alter table t1 add column y int'; end"
DB20000I  The SQL command completed successfully.

#> db2 "begin DECLARE CONTINUE HANDLER FOR SQLSTATE '42711' BEGIN END; EXECUTE IMMEDIATE 'alter table t1 add column y int'; end"
DB20000I  The SQL command completed successfully.

答案 2 :(得分:0)

DB2提供ANSI标准INFORMATION_SCHEMA视图,因此您可以使用以下技术检查列是否存在。我更多的是T-SQL,而不是DB2,所以你可能需要调整控制流语句。

IF NOT EXISTS(
    SELECT * 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
        TABLE_SCHEMA = 'P1ADM549'
        AND TABLE_NAME = 'T549RMOP'
        AND COLUMN_NAME = 'VR_PGO'
    )
BEGIN
    --do something
END;

答案 3 :(得分:0)

在DB2中,您有两个选项,您甚至可以组合使用:

首先,您可以在匿名块中定义IF ELSE,该块由BEGIN END定义

BEGIN
 DECLARE EXIST BOOLEAN;
 IF (EXIST = TRUE) THEN
  ...
 ELSE
  ...
 END IF;
END @

更多信息:https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/anonymous_block?lang=en

您可以做的第二件事是利用条件编译的功能。但是,您必须定义CC_FLAGS,这更适用于脚本(http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/c0056403.html?cp=SSEPGG_10.5.0%2F2-12-7-3