为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:WIN10
【CPU】:
【问题描述】*:如何查询某一模式下,所有表的字段信息(包括字段是否为自增列,以及自增的一些属性、字段的精度、等信息)
测试下这个查询,看看是否符合需要
SELECT /*+ CASE_WHEN_CVT_IFUN(8)*/
USR.NAME AS USER_NAME
,SCH.NAME AS SCHEMA_NAME
,TAB.NAME AS TABLE_NAME
,COL.COLID + 1 AS COLUMN_ID
,COL.NAME AS COLUMN_NAME
,SF_GET_TYPE_WITH_LENGTH(COL.TYPE$, COL.LENGTH$, COL.SCALE) AS DATATYPE
,CAST(CASE WHEN COL.TYPE$ IN ('NUMERIC','NUMBER','DEC','DECIMAL') THEN 22
WHEN COL.SCALE = 7 AND UNICODE() = 1 THEN COL.LENGTH$ * 4
WHEN COL.SCALE = 7 AND UNICODE() = 0 THEN COL.LENGTH$ * 2
ELSE COL.LENGTH$ END
AS NUMBER
) AS DATA_LENGTH
,CAST(CASE WHEN COL.TYPE$ IN ('NUMERIC','NUMBER','DEC','DECIMAL') THEN CASE WHEN COL.LENGTH$ = 0 THEN NULL ELSE COL.LENGTH$ END
WHEN COL.TYPE$ IN ('INTERVAL YEAR TO MONTH','INTERVAL YEAR','INTERVAL MONTH','INTERVAL DAY','INTERVAL DAY TO HOUR','INTERVAL DAY TO MINUTE','INTERVAL DAY TO SECOND','INTERVAL HOUR','INTERVAL HOUR TO MINUTE','INTERVAL HOUR TO SECOND','INTERVAL MINUTE','INTERVAL MINUTE TO SECOND','INTERVAL SECOND') THEN ((COL.SCALE & 0XF0)>>4)
END
AS NUMBER
) AS DATA_PRECISION
,CAST(CASE WHEN COL.TYPE$ IN ('NUMERIC','NUMBER','DEC','DECIMAL') AND COL.LENGTH$=0 THEN NULL
WHEN COL.TYPE$ IN ('INTERVAL YEAR TO MONTH','INTERVAL YEAR','INTERVAL MONTH','INTERVAL DAY','INTERVAL DAY TO HOUR','INTERVAL DAY TO MINUTE','INTERVAL DAY TO SECOND','INTERVAL HOUR','INTERVAL HOUR TO MINUTE','INTERVAL HOUR TO SECOND','INTERVAL MINUTE','INTERVAL MINUTE TO SECOND','INTERVAL SECOND') THEN (COL.SCALE & 0X0F)
ELSE COL.SCALE
END
AS NUMBER
) AS DATA_SCALE
,COL.NULLABLE$ AS NULLALBE
,COL.DEFVAL AS DATADEFAULT
,CASE WHEN SF_COL_IS_IDX_KEY(IDXINFO.KEYNUM, IDXINFO.KEYINFO, COL.COLID) = 1 THEN 'Y' END AS PRIMARY_KEY
,CASE WHEN COL.INFO2 & 0x01 = 1 AND LENGTH(TAB.INFO6) > 24 THEN DECODE(SUBSTRBB(TAB.INFO6,25,1),1,'IDENTITY',2,'AUTO_INCREMENT') END AS INCREMENT_TYPE
,COLCOMM.COMMENT$ AS COMMENTS
FROM SYSOBJECTS TAB
JOIN SYSOBJECTS SCH ON SCH.TYPE$ = 'SCH' AND SCH.ID = TAB.SCHID
JOIN SYSOBJECTS USR ON USR.TYPE$ = 'UR' AND USR.ID = SCH.PID
JOIN SYSCOLUMNS COL ON COL.ID = TAB.ID
LEFT JOIN SYSCOLUMNCOMMENTS COLCOMM ON COLCOMM.SCHNAME = SCH.NAME AND COLCOMM.TVNAME = TAB.NAME AND COLCOMM.COLNAME = COL.NAME
LEFT JOIN SYSCONS CONS ON CONS.TYPE$ = 'P' AND CONS.TABLEID = TAB.ID
LEFT JOIN SYSINDEXES IDXINFO ON IDXINFO.ID = CONS.INDEXID
--WHERE SCH.NAME = '模式名'
-- AND TAB.NAME = '表名'
ORDER BY 1,2,3,4
可以参考下:
SELECT
S1.NAME AS 表名,
S2.NAME AS 列名,
S2."TYPE$" AS 字段类型,
S2."LENGTH$" AS 字段长度
FROM
SYSOBJECTS S1,
SYSCOLUMNS S2
WHERE
S1."SUBTYPE$" = 'UTAB'
AND S1.ID = S2.ID;