如何在db2数据库中打印每个列/表的详细信息(表名,列名,数据类型)?

In my previous question Mark建议在显示数据库中每个表的计数时给出一个很好的答案。我想扩展此过程,并显示有关数据库中每一列的特定信息(TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE),而不是计数。

到目前为止,我有以下命令:

userId

但是现在当我运行它时:

--#SET TERMINATOR @
CREATE OR REPLACE FUNCTION EXPORT_SCHEMAS()
RETURNS TABLE (P_TABSCHEMA VARCHAR(128),P_TABNAME VARCHAR(128),P_COLUM_NNAME VARCHAR(128),P_DATA_TYPE VARCHAR(128))
BEGIN
  DeclARE L_STMT VARCHAR(256);
  DeclARE L_ROWS VARCHAR(256);

  FOR V1 AS
    SELECT TABSCHEMA,TABNAME
    FROM SYSCAT.TABLES
    WHERE TYPE = 'T'
    ORDER BY 1,2
  DO
    SET L_STMT = 'SET ? = (SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE FROM SYSIBM.COLUMNS where TABLE_NAME = "'||V1.TABNAME||'" AND TABLE_SCHEMA = "'||V1.TABSCHEMA||'")';
    PREPARE S FROM L_STMT;
    EXECUTE S INTO L_ROWS;
    PIPE(L_ROWS);
  END FOR;
  RETURN;
END@

SELECT * FROM TABLE(EXPORT_SCHEMAS())@

我遇到了错误:

db2 -ntd~ -f export_schemas.sql > dump.csv

能否请您帮助我,让我知道这里出了什么问题,我该如何解决?谢谢!

longzhourong1 回答:如何在db2数据库中打印每个列/表的详细信息(表名,列名,数据类型)?

如果将Db2用于LUW,则不应在系统目录的查询中使用SYSIBM模式。请改用SYSCAT

您无需使用任何功能即可在此处获得所需的内容。请改用以下查询:

SELECT TABSCHEMA,TABNAME,COLNAME,TYPENAME
FROM SYSCAT.COLUMNS
ORDER BY TABSCHEMA,COLNO;

至于你的日常活动。文本中存在许多错误。

1)如果要使用SET语句分配多个值,则必须在该语句中使用相应数量的参数标记:

SET (?,...,?) = (SELECT COL1,COLn FROM ...);
PREPARE S FROM L_STMT;
EXECUTE S INTO L_V1,L_Vn;

2)RETURNS TABLE (...)PIPE(...)的列数必须相同

,

您可以直接查询表SYSCAT.COLUMNSSYSCAT.TABLES。以下内容返回表架构和名称,后跟列名称及其类型。列信息按列顺序排序:

select t.tabschema,t.tabname,c.colname,c.typename,c.colno
from syscat.columns c,syscat.tables t
where t.type='T' and t.tabname=c.tabname and t.tabschema=c.tabschema
order by 1,2,c.colno

顺便说一句:Db2具有用于导出架构信息的工具db2look

本文链接:https://www.f2er.com/3119528.html

大家都在问