kingbase7获取唯一索引和子分区键的view

 2023-09-10 阅读 14 评论 0

摘要:--构造表CREATE TABLE ZYJ.TEST(ID INT PRIMARY KEY,NAME VARCHAR(200),ADDR VARCHAR(200),TEL VARCHAR(11));ALTER TABLE ZYJ.TEST ADD COLUMN VARCHAR1 VARCHAR(200);ALTER TABLE ZYJ.TEST ADD COLUMN VARCHAR2 VARCHAR(200);ALTER TABLE ZYJ.TEST ADD COLUMN VARCHAR3 VAR

--构造表
CREATE TABLE ZYJ.TEST(ID INT PRIMARY KEY,NAME VARCHAR(200),ADDR VARCHAR(200),TEL VARCHAR(11));
ALTER TABLE ZYJ.TEST ADD COLUMN VARCHAR1 VARCHAR(200);
ALTER TABLE ZYJ.TEST ADD COLUMN VARCHAR2 VARCHAR(200);
ALTER TABLE ZYJ.TEST ADD COLUMN VARCHAR3 VARCHAR(200);

CREATE INDEX IDX_ADDR ON ZYJ.TEST(ADDR);
CREATE UNIQUE INDEX IDX_TEL ON ZYJ.TEST(TEL);
CREATE UNIQUE INDEX IDXU_VARCHAR123 ON ZYJ.TEST(VARCHAR1,VARCHAR2,VARCHAR3);

CREATE TABLE zyj.part_comb (year INT, month INT, day INT, amount_sold INT)
PARTITION BY RANGE (year)
SUBPARTITION BY RANGE(month)
(
PARTITION before2001 VALUES LESS THAN (2001)
(
SUBPARTITION q1_before VALUES LESS THAN (7) TABLESPACE system,
SUBPARTITION q2_before VALUES LESS THAN (MAXVALUE) TABLESPACE system
),
PARTITION on2001 VALUES LESS THAN (2002)
(
SUBPARTITION q1_2001 VALUES LESS THAN (4) TABLESPACE system,
SUBPARTITION q2_2001 VALUES LESS THAN (7) TABLESPACE system,
SUBPARTITION q3_2001 VALUES LESS THAN (10) TABLESPACE system,
SUBPARTITION q4_2001 VALUES LESS THAN (MAXVALUE) TABLESPACE system
),
PARTITION future2001 VALUES LESS THAN (MAXVALUE)
(
SUBPARTITION q1_future VALUES LESS THAN (MAXVALUE) TABLESPACE system
)
) TABLESPACE system;

INSERT INTO zyj.part_comb VALUES(2000,5,12, 1000);
INSERT INTO zyj.part_comb VALUES(2001,3,17, 2000);

select * from zyj.part_comb t;

--构造系统视图结构
CREATE TABLE ZYJ.SYS_ATTRIBUTE AS SELECT * FROM SYS_ATTRIBUTE ATTR WHERE ATTR.ATTRELID=16493;

CREATE TABLE ZYJ.SYS_INDEX AS SELECT * FROM SYS_INDEX INDEX WHERE INDRELID=16493;
--------------------------------------------------------------------------------------------------------------------------
--获取索引名称等的函数
--1
CREATE OR REPLACE FUNCTION ZYJ.GET_COL_CHECKS( TABOID OID, COLNUM INT4) RETURN TEXT AS
DECLARE
checks_text TEXT;
check_record RECORD;
BEGIN
checks_text := NULL;
FOR check_record IN SELECT CONSRC FROM SYS_CONSTRAINT CONSTR
WHERE taboid = CONSTR.CONRELID AND CONSTR.CONTYPE = 'c' AND colnum = any(CONSTR.CONKEY)
LOOP
IF checks_text IS NOT NULL THEN
checks_text := CONCAT(checks_text, ', ');
ELSE
checks_text := '';
END IF;
checks_text := CONCAT(checks_text, check_record.CONSRC);
END LOOP;
RETURN checks_text;
END GET_COL_CHECKS;

--2
CREATE OR REPLACE FUNCTION ZYJ.GET_COL_FOREIGNS( TABOID OID, COLNUM INT4) RETURN TEXT AS
DECLARE
foreigns_text TEXT;
foreign_record record;
temp_table_oid OID;
BEGIN
foreigns_text := NULL;
temp_table_oid := NULL;
FOR foreign_record IN SELECT CONSTR.CONFRELID tableoid, CLASS.RELNAME tablename, ATTR.ATTNAME colname
FROM SYS_CONSTRAINT CONSTR, SYS_CLASS CLASS, SYS_ATTRIBUTE ATTR
WHERE taboid = CONSTR.CONRELID AND CONSTR.CONFRELID = CLASS.OID AND colnum = any(CONSTR.CONKEY) AND CONSTR.CONTYPE = 'f'
AND ATTR.ATTRELID = CONSTR.CONFRELID AND ATTR.ATTNUM = any(CONSTR.confkey) ORDER BY tableoid
LOOP -- get tables and foreign constraints information
IF temp_table_oid = foreign_record.tableoid THEN
foreigns_text := CONCAT(foreigns_text, ',');
foreigns_text := CONCAT(foreigns_text, foreign_record.colname);
ELSE
IF foreigns_text IS NOT NULL THEN
foreigns_text := CONCAT(foreigns_text, ')');
foreigns_text := CONCAT(foreigns_text, ', ');
ELSE
foreigns_text := '';
END IF;
foreigns_text := CONCAT(foreigns_text, foreign_record.tablename);
foreigns_text := CONCAT(foreigns_text, '(');
foreigns_text := CONCAT(foreigns_text, foreign_record.colname);
temp_table_oid := foreign_record.tableoid;
END IF;
END LOOP;
IF foreigns_text IS NOT NULL THEN
foreigns_text := CONCAT(foreigns_text, ')');
END IF;
RETURN foreigns_text;
END GET_COL_FOREIGNS;

--3
CREATE OR REPLACE FUNCTION ZYJ.GET_COL_PRIMARY( TABOID OID, COLNUM INT4) RETURN TEXT AS
DECLARE
primary_text TEXT;
con_key SMALLINT[];
con_key_id INT;
BEGIN
primary_text := NULL;
SELECT CONNAME, CONKEY INTO primary_text, con_key FROM SYS_CONSTRAINT CONSTR
WHERE taboid = CONSTR.CONRELID AND CONSTR.CONTYPE = 'p' AND colnum = any(CONSTR.CONKEY);
IF primary_text IS NOT NULL THEN
primary_text := CONCAT(primary_text, '(');
FOR con_key_id in 1..array_length(con_key, 1)
LOOP
IF con_key_id > 1 THEN
primary_text := CONCAT(primary_text, ', ');
END IF;
primary_text := CONCAT(primary_text, con_key[con_key_id]);
END LOOP;
primary_text := CONCAT(primary_text, ')');
END IF;
RETURN primary_text;
END GET_COL_PRIMARY;

--4
CREATE OR REPLACE FUNCTION ZYJ.GET_COL_UNIQUES( TABOID OID, COLNUM INT4) RETURN TEXT AS
DECLARE
uniques_text TEXT;
unique_record RECORD;
col_number INT;
BEGIN
uniques_text := NULL;
col_number := 0;
FOR unique_record IN SELECT CONNAME, CONKEY FROM SYS_CONSTRAINT CONSTR
WHERE taboid = CONSTR.CONRELID AND CONSTR.CONTYPE = 'u' AND colnum = any(CONSTR.CONKEY)
LOOP
IF uniques_text IS NOT NULL THEN
uniques_text := CONCAT(uniques_text, ', ');
ELSE
uniques_text := '';
END IF;
uniques_text := CONCAT(uniques_text, unique_record.CONNAME);
uniques_text := CONCAT(uniques_text, '(');
FOR col_number in 1..array_length(unique_record.CONKEY, 1)
LOOP
IF col_number > 1 THEN
uniques_text := CONCAT(uniques_text, ', ');
END IF;
uniques_text := CONCAT(uniques_text, unique_record.CONKEY[col_number]);
END LOOP;
uniques_text := CONCAT(uniques_text, ')');
END LOOP;
RETURN uniques_text;
END GET_COL_UNIQUES;

--5
CREATE OR REPLACE FUNCTION ZYJ.GET_COL_INDEXS( TABOID OID, COLNUM INT4) RETURN TEXT AS
DECLARE
indexs_text TEXT;
index_record record;
temp_index_oid OID;
BEGIN
indexs_text := NULL;
temp_index_oid := NULL;
FOR index_record IN SELECT CLASS.RELNAME indexname, ATTR.ATTNAME colname, INDEX.INDEXRELID indexoid
FROM SYS_INDEX INDEX, SYS_CLASS CLASS, SYS_ATTRIBUTE ATTR
WHERE taboid = INDEX.INDRELID AND colnum = any(INDEX.INDKEY) AND INDEX.INDEXRELID = CLASS.OID
AND ATTR.ATTRELID = INDEX.INDRELID AND ATTR.ATTNUM = any(INDEX.INDKEY) ORDER BY indexoid
LOOP -- get indexs and column information
IF temp_index_oid = index_record.indexoid THEN
indexs_text := CONCAT(indexs_text, ', ');
indexs_text := CONCAT(indexs_text, index_record.colname);
ELSE
IF indexs_text IS NOT NULL THEN
indexs_text := CONCAT(indexs_text, ')');
indexs_text := CONCAT(indexs_text, ', ');
ELSE
indexs_text := '';
END IF;
indexs_text := CONCAT(indexs_text, index_record.indexname);
indexs_text := CONCAT(indexs_text, '(');
indexs_text := CONCAT(indexs_text, index_record.colname);
temp_index_oid := index_record.indexoid;
END IF;
END LOOP;
IF indexs_text IS NOT NULL THEN
indexs_text := CONCAT(indexs_text, ')');
END IF;
RETURN indexs_text;
END GET_COL_INDEXS;
--------------------------------------------------------------------------------------------------------------------------

--查询分区和子分区键对应列
SELECT CASE WHEN T1.PARTITIONKEY IS NULL THEN T3.PARTITIONKEY ELSE T1.PARTITIONKEY END AS PARTITIONKEY,
CASE WHEN T1.PARTITIONTYPE IS NULL THEN T3.PARTITIONTYPE ELSE T1.PARTITIONTYPE END AS PARTITIONTYPE,
T3.PARTITIONKEY,T3.PARTITIONTYPE,T1.PARTITIONKEY,T1.PARTITIONTYPE,T1.* FROM ZYJ.USER_TABLE_COLS T1
LEFT JOIN (SELECT DISTINCT T.SCHEMANAME,T.PARENTNAME,T.PARTITIONTYPE,T.PARTITIONKEY FROM SYS_PARTTABLES T) T3
ON T1.NSPNAME=T3.SCHEMANAME AND T1.TABLE_NAME=T3.PARENTNAME AND T1.COLUMN_NAME=REPLACE(T3.PARTITIONKEY,'"','')
WHERE T1.NSPNAME='ZYJ' AND T1.TABLE_NAME='PART_COMB';

--------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FORCE VIEW "ZYJ"."USER_TABLE_COLS"("IS_UNIQUE_INDEX","INDISPRIMARY","INDISUNIQUE","OID","INDRELID","INDEXRELID","NSPNAME","TABLE_NAME","COLUMN_NAME","DATA_TYPE","DATA_TYPE_MOD","DATA_TYPE_OWNER","DATA_LENGTH","DATA_PRECISION","DATA_SCALE","NULLABLE","COLUMN_ID","DEFAULT_LENGTH","DATA_DEFAULT","NUM_DISTINCT","LOW_VALUE","HIGH_VALUE","DENSITY","NUM_NULLS","NUM_BUCKETS","LAST_ANALYZED","SAMPLE_SIZE","CHARACTER_SET_NAME","CHAR_COL_DECL_LENGTH","GLOBAL_STATS","USER_STATS","AVG_COL_LEN","CHAR_LENGTH","CHAR_USED","V80_FMT_IMAGE","DATA_UPGRADED","HIDDEN_COLUMN","VIRTUAL_COLUMN","SEGMENT_COLUMN_ID","INTERNAL_COLUMN_ID","HISTOGRAM","QUALIFIED_COL_NAME","ISENCRYPTED","COMPMETHOD","STORAGE","IDENTITY_NAME","CHECKS","FOREIGNS","PRIMARY_KEY","UNIQUES","GRANTS","INDEXS","PARTITIONTYPE","PARTITIONKEY")
AS
SELECT CASE WHEN INDEX.INDISPRIMARY=FALSE AND INDEX.INDISUNIQUE=TRUE THEN 1 ELSE 0 END AS IS_UNIQUE_INDEX,
INDEX.INDISPRIMARY,INDEX.INDISUNIQUE,C.OID,INDEX.INDRELID,INDEX.INDEXRELID,
CAST((( SELECT SYS_NAMESPACE.NSPNAME
FROM SYS_NAMESPACE
WHERE SYS_NAMESPACE.OID = C.RELNAMESPACE)) AS CHARACTER VARYING(30 BYTE)) AS NSPNAME,
CAST(C.RELNAME AS CHARACTER VARYING(30 BYTE)) AS TABLE_NAME, CAST(ATTR.ATTNAME AS CHARACTER VARYING(30 BYTE)) AS COLUMN_NAME, CAST(
CASE T.TYPNAME
WHEN 'BPCHAR' THEN 'CHAR'
ELSE CAST(T.TYPNAME AS TEXT)
END AS CHARACTER VARYING(106 BYTE)) AS DATA_TYPE, CAST(NULL AS CHARACTER VARYING(3 CHAR)) AS DATA_TYPE_MOD, CAST(AU.ROLNAME AS CHARACTER VARYING(30 BYTE)) AS DATA_TYPE_OWNER, CAST(
CASE
WHEN ATTR.ATTLEN = (-1) THEN
CASE T.TYPNAME
WHEN 'BIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'BIT VARYING' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMETZ' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIME' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMESTAMPTZ' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMESTAMP' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'INTERVAL' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'VARBIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'VARCHAR' THEN
CASE ATTR.ATTTYPMOD
WHEN (-1) THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
WHEN 'BPCHAR' THEN
CASE ATTR.ATTTYPMOD
WHEN (-1) THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
ELSE
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16) - 4
ELSE 0
END
END
ELSE CAST(ATTR.ATTLEN AS INTEGER)
END AS NUMERIC(10,0)) AS DATA_LENGTH, CAST(
CASE CAST(
CASE T.TYPNAME
WHEN 'BPCHAR' THEN 'CHAR'
ELSE CAST(T.TYPNAME AS TEXT)
END AS CHARACTER VARYING(106 BYTE))
WHEN 'NUMERIC' THEN
CASE
WHEN ATTR.ATTTYPMOD = (-1) THEN CAST(38 AS NUMERIC(38,0))
ELSE CAST(((ATTR.ATTTYPMOD - 4) >> 16) AS NUMERIC(38,0)) & BITTONUMERIC(B'1111111111111111')
END
WHEN 'FLOAT4' THEN CAST(7 AS NUMERIC(38,0))
WHEN 'FLOAT8' THEN CAST(15 AS NUMERIC(38,0))
ELSE NULL
END AS NUMERIC(10,0)) AS DATA_PRECISION, CAST(
CASE CAST(
CASE T.TYPNAME
WHEN 'BPCHAR' THEN 'CHAR'
ELSE CAST(T.TYPNAME AS TEXT)
END AS CHARACTER VARYING(106 BYTE))
WHEN 'NUMERIC' THEN CAST((ATTR.ATTTYPMOD - 4) AS NUMERIC(38,0)) & BITTONUMERIC(B'1111111111111111')
ELSE NULL
END AS NUMERIC(10,0)) AS DATA_SCALE, CAST(IF(CAST(ATTR.ATTNOTNULL AS INTEGER), 'N', 'Y') AS CHARACTER VARYING(1 CHAR)) AS NULLABLE, CAST(ATTR.ATTNUM AS NUMERIC(10,0)) AS COLUMN_ID, CAST(
CASE ATTR.ATTHASDEF
WHEN false THEN NULL
ELSE CAST(
CASE
WHEN ATTR.ATTLEN = (-1) THEN
CASE T.TYPNAME
WHEN 'BIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'BIT VARYING' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMETZ' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIME' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMESTAMPTZ' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMESTAMP' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'INTERVAL' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'VARBIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'VARCHAR' THEN
CASE ATTR.ATTTYPMOD
WHEN (-1) THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
WHEN 'BPCHAR' THEN
CASE ATTR.ATTTYPMOD
WHEN (-1) THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
ELSE
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16) - 4
ELSE 0
END
END
ELSE CAST(ATTR.ATTLEN AS INTEGER)
END AS NUMERIC(10,0))
END AS NUMERIC(10,0)) AS DEFAULT_LENGTH, DEF.ADSRC AS DATA_DEFAULT, CAST(0 AS NUMERIC(10,0)) AS NUM_DISTINCT, CAST(0 AS NUMERIC(10,0)) AS LOW_VALUE, CAST(0 AS NUMERIC(10,0)) AS HIGH_VALUE, CAST(0 AS NUMERIC(10,0)) AS DENSITY, CAST(0 AS NUMERIC(10,0)) AS NUM_NULLS, CAST(0 AS NUMERIC(10,0)) AS NUM_BUCKETS, CAST(NULL AS TIMESTAMP(0) WITHOUT TIME ZONE) AS LAST_ANALYZED, CAST(0 AS NUMERIC(10,0)) AS SAMPLE_SIZE, CAST(NULL AS CHARACTER VARYING(44 CHAR)) AS CHARACTER_SET_NAME, CAST(0 AS NUMERIC(10,0)) AS CHAR_COL_DECL_LENGTH, CAST('NO' AS CHARACTER VARYING(3 CHAR)) AS GLOBAL_STATS, CAST('NO' AS CHARACTER VARYING(3 CHAR)) AS USER_STATS, CAST(0 AS NUMERIC(10,0)) AS AVG_COL_LEN, CAST(
CASE CAST(
CASE T.TYPNAME
WHEN 'BPCHAR' THEN 'CHAR'
ELSE CAST(T.TYPNAME AS TEXT)
END AS CHARACTER VARYING(106 BYTE)) = ANY (ARRAY['VARCHAR', 'BPCHAR', 'NCHAR', 'NVARCHAR'])
WHEN true THEN CAST(
CASE
WHEN ATTR.ATTLEN = (-1) THEN
CASE T.TYPNAME
WHEN 'BIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'BIT VARYING' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMETZ' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIME' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMESTAMPTZ' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'TIMESTAMP' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'INTERVAL' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'VARBIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
WHEN 'VARCHAR' THEN
CASE ATTR.ATTTYPMOD
WHEN (-1) THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
WHEN 'BPCHAR' THEN
CASE ATTR.ATTTYPMOD
WHEN (-1) THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
ELSE
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16) - 4
ELSE 0
END
END
ELSE CAST(ATTR.ATTLEN AS INTEGER)
END AS NUMERIC(10,0))
ELSE CAST(0 AS NUMERIC(38,0))
END AS NUMERIC(10,0)) AS CHAR_LENGTH, CAST(
CASE (CAST(
CASE T.TYPNAME
WHEN 'BPCHAR' THEN 'CHAR'
ELSE CAST(T.TYPNAME AS TEXT)
END AS CHARACTER VARYING(106 BYTE)) = ANY (ARRAY['VARCHAR', 'BPCHAR', 'NCHAR', 'NVARCHAR'])) AND ATTR.ATTTYPMOD <> (-1)
WHEN true THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN 'C'
ELSE 'B'
END
ELSE NULL
END AS CHARACTER VARYING(1 CHAR)) AS CHAR_USED, CAST('NO' AS CHARACTER VARYING(3 CHAR)) AS V80_FMT_IMAGE, CAST('NO' AS CHARACTER VARYING(3 CHAR)) AS DATA_UPGRADED, CAST('NO' AS CHARACTER VARYING(3 CHAR)) AS HIDDEN_COLUMN, CAST('NO' AS CHARACTER VARYING(3 CHAR)) AS VIRTUAL_COLUMN, CAST(0 AS NUMERIC(10,0)) AS SEGMENT_COLUMN_ID, CAST(ATTR.ATTNUM AS NUMERIC(10,0)) AS INTERNAL_COLUMN_ID, CAST(NULL AS CHARACTER VARYING(15 CHAR)) AS HISTOGRAM, CAST(NULL AS CHARACTER VARYING(4000 CHAR)) AS QUALIFIED_COL_NAME, ATTR.ATTISENCRYPTED AS ISENCRYPTED, CAST(ATTR.ATTCOMPMETHOD AS CHARACTER VARYING(1 CHAR)) AS COMPMETHOD, CAST(ATTR.ATTSTORAGE AS CHARACTER VARYING(1 CHAR)) AS "STORAGE", CAST((( SELECT "IDENTITY".RELNAME
FROM SYS_CLASS "IDENTITY"
WHERE "IDENTITY".OID = ATTR.ATTSEQOID)) AS CHARACTER VARYING(30 BYTE)) AS IDENTITY_NAME,
ZYJ.GET_COL_CHECKS(ATTR.ATTRELID, CAST(ATTR.ATTNUM AS INTEGER)) AS CHECKS,
ZYJ.GET_COL_FOREIGNS(ATTR.ATTRELID, CAST(ATTR.ATTNUM AS INTEGER)) AS FOREIGNS,
ZYJ.GET_COL_PRIMARY(ATTR.ATTRELID, CAST(ATTR.ATTNUM AS INTEGER)) AS PRIMARY_KEY,
ZYJ.GET_COL_UNIQUES(ATTR.ATTRELID, CAST(ATTR.ATTNUM AS INTEGER)) AS UNIQUES,
ARRAY_CAT(ATTR.ATTACL, C.RELACL) AS GRANTS,
ZYJ.GET_COL_INDEXS(C.OID, CAST(ATTR.ATTNUM AS INTEGER)) AS INDEXS,
CAST(((( SELECT
CASE PARTTABLES.PARTITIONKEY
WHEN NULL THEN NULL
ELSE
CASE STRPOS(PARTTABLES.PARTITIONKEY, CAST(ATTR.ATTNAME AS TEXT))
WHEN 0 THEN NULL
ELSE PARTTABLES.PARTITIONTYPE
END
END AS "CASE"
FROM SYS_PARTTABLES PARTTABLES, SYS_NAMESPACE NAMESPACE
WHERE CAST(C.RELNAME AS TEXT) = PARTTABLES.TABLENAME AND NAMESPACE.OID = C.RELNAMESPACE AND NAMESPACE.NSPNAME = PARTTABLES.SCHEMANAME))) AS CHARACTER VARYING(30 BYTE)) AS PARTITIONTYPE, ( SELECT
CASE PARTTABLES.PARTITIONKEY
WHEN NULL THEN NULL
ELSE
CASE STRPOS(PARTTABLES.PARTITIONKEY, CAST(ATTR.ATTNAME AS TEXT))
WHEN 0 THEN NULL
ELSE PARTTABLES.PARTITIONKEY
END
END AS "CASE"
FROM SYS_PARTTABLES PARTTABLES, SYS_NAMESPACE NAMESPACE
WHERE CAST(C.RELNAME AS TEXT) = PARTTABLES.TABLENAME AND NAMESPACE.OID = C.RELNAMESPACE AND NAMESPACE.NSPNAME = PARTTABLES.SCHEMANAME) AS PARTITIONKEY
FROM SYS_CLASS C,SYS_TYPE T, SYS_AUTHID AU, SYS_ATTRIBUTE ATTR
LEFT JOIN SYS_ATTRDEF DEF ON ATTR.ATTNUM = DEF.ADNUM AND ATTR.ATTRELID = DEF.ADRELID
LEFT JOIN SYS_INDEX INDEX ON ATTR.ATTRELID = INDEX.INDRELID AND ATTR.ATTNUM = any(INDEX.INDKEY)
WHERE ATTR.ATTNUM > 0 AND ATTR.ATTTYPID = T.OID AND ATTR.ATTRELID = C.OID AND T.TYPOWNER = AU.OID;

转载于:https://www.cnblogs.com/buffercache/p/11391974.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/35840.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息