删除 DB2 数据库(如果存在)

Drop DB2 database if exist

我想编写 db2 命令来找出第一个数据库是否存在,如果存在该数据库,则删除该数据库并创建一个新的更新数据库。

同样请帮忙

DB2 中没有支持该指令的命令或语言。您必须定义当给定名称作为数据库的别名(不是数据库的真实名称)存在时要做什么,删除别名?重命名?

脚本如下所示:

  1. 列出数据库目录并过滤名称和别名(db2 list db directory)。过滤可以在 linux 中使用 Awk 或 Grep,在 Windows 中使用 Filter。
  2. 如果存在同名的数据库别名,则由您决定如何操作。
  3. 相反,如果存在具有该名称的数据库名称,则将其删除 (db2 drop db xxx)
  4. 创建数据库。
  5. 如果系统存在数据库错误(SQL1005N),则编目并删除(db2 catalog db xxx, db2 drop db xxx)
  6. 重试数据库创建。

首先查询系统table,在db2中为zostableSYSIBM.SYSDATABASE或SYSIBM.SYSTABLES,在db2 LUW版本tableSYSCAT.tables中。如果查询中有行,则数据库存在。

调用此函数将使您删除 table(如果存在):

CALL FNC.DROP_IF_EXISTS('TABLENAME')!

在 LUW 中,您可以:

--#SET TERMINATOR @
BEGIN
 DECLARE TABLE_NOT_FOUND CONDITION FOR SQLSTATE '42704';
 DECLARE CONTINUE HANDLER FOR TABLE_NOT_FOUND;
 EXECUTE IMMEDIATE 'DROP TABLE myschema.mytable';
END @

您可以将此代码段转换为接收架构名称和 table 名称的函数。