【问题标题】:Generate table DDL from DB2 11.1 LUW从 DB2 11.1 LUW 生成表 DDL
【发布时间】:2021-02-16 20:49:32
【问题描述】:

我想为一个表生成 DDL 脚本文件。我很想用 SQL 语句来做这件事,但我会用 CLPPLUS 或 CLP 解决方案。 这可以用 db2look 完成吗?我试过了,但总是得到太多细节。

db2look -d 'MY_DB' -z 'DB2INST1' -t 'MY_TABLE' -e -o MY_TABLE.sql

db2look -d 'MY_DB' -z 'DB2INST1' -t 'MY_TABLE' -e -noview -nofed -x -o MY_TABLE.sql

我只想要基本的 DDL(create table 语句),我不想要关于表的任何附加细节。

【问题讨论】:

  • 我认为没有任何方法可以只获取 create table 语句。
  • 用 awk 之类的工具过滤输出怎么样?
  • 感谢 @mao 提供我正在寻找的 SQL 解决方案,但由于权限问题我无法运行它。所以,使用 awk 的 shell 脚本对我有用。

标签: db2 ddl


【解决方案1】:

没有办法让 db2look 打印 DDL 仅用于 CREATE TABLE 语句。
如果您使用的是 Linux / Unix,您可以尝试以下操作:

db2look -d MY_DB -z DB2INST1 -t MY_TABLE -e -noview -nofed \
| awk -v RS='' '/CREATE TABLE/' \
| tee MY_TABLE.sql

【讨论】:

    【解决方案2】:

    如前所述,db2look 工具有局限性,其中之一是它不会专门为您提供所需的信息子集。因此,您可以对输出进行后期处理(如 Mark Ba​​rinstein 所建议的那样)。

    根据您只需要“创建表”DDL 的原因,有时您只需要使用CREATE TABLE ... LIKE ... 达到一个结果,特别是如果您使用已声明的全局临时表。用那个方法,就不用db2look了。

    对于 Db2-LUW - 如果您的权限和授权正确,还有另一种使用 SQL 的方法。

    对于 Db2-Linux/Unix/Windows,有一个名为 SYSPROC.DB2LK_GENERATE_DDL 的未记录存储过程,它将数据写入 SYSTOOLS.DB2LOOK_INFO 。如果授予/权限对您的帐户是正确的,那么您可以将此技术与普通 SQL 一起使用,以选择性地从 SYSTOOLS.DB2LOOK_INFO 中提取。实例所有者通常已经拥有所需的权限(包括对过程的执行权限和对序列db2look_token 的权限以及对systools.db2look_info 和相关视图的选择访问权限。)

    假设我有一个名为 USER1.MYTAB 的表,我想用普通 SQL 提取其 DDL,这里是示例代码:

    --#SET TERMINATOR @
    create or replace variable  my_ddl varchar(1024)@
    
    begin
        declare v_out_token integer default 0;
    
        call sysproc.db2lk_generate_ddl('-e -t USER1.MYTAB', v_out_token);
    
        select substr(sql_stmt,1,1024)
        into my_ddl
        from systools.db2look_info
        where op_token = v_out_token
        and sql_operation='CREATE' with ur;
    
    end@
    
    
    values(my_ddl)@
    

    流行的 DBeaver GUI 工具使用这种技术,其他一些工具也是如此。您也可以在 SQL 中对 SQL_STMT 列的内容进行后处理。

    您可以考虑对 IBM 改进以记录此界面的建议进行投票:

    https://ibm-data-and-ai.ideas.aha.io/ideas/DB24LUW-I-962

    不幸的是,IBM 将其作为“未来考虑”的低优先级,但投票的人越多,IBM 的某个人可能会注意到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多