如何测试DB2中是否存在某些列是最简单的方法? 我只是想运行一个添加列的脚本。我不想要一个程序。 是否必须使用Begin End或创建程序?
IF (NOT EXISTS(
SELECT * FROM P1ADM549.T549RMOP WHERE VR_PGO ='VR_PGO' AND COLNAME = 'VR_PGO'))
THEN
EXECUTE something...
END
答案 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)