如前所述,db2look 工具有局限性,其中之一是它不会专门为您提供所需的信息子集。因此,您可以对输出进行后期处理(如 Mark Barinstein 所建议的那样)。
根据您只需要“创建表”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 的某个人可能会注意到。