--构造表
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

kingbase7获取唯一索引和子分区键的view相关推荐

  1. sql中添加唯一索引(非主键)

    if OBJECT_ID('tempdb..#tem') is not null drop table #tem create table #tem (aa nvarchar(20)) alter t ...

  2. MySQL的几个概念:主键,外键,索引,唯一索引

    一.概念: 1.主键(primary key) 能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录 ...

  3. 唯一索引与主键索引的比较

    唯一索引 唯一索引不允许两行具有相同的索引值. 如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存.当新数据将使表中的键值重复时,数据库也拒绝接受此数据.例如,如果在 ...

  4. 浅谈主键索引与唯一索引

    主键索引与唯一索引 一.主键索引定义 主键索引是唯一索引的特殊类型. 数据库表通常有一列或列组合,其值用来唯一标识表中的每一行.该列称为表的主键. 在数据库关系图中为表定义一个主键将自动创建主键索引, ...

  5. 主键、唯一键与唯一索引的区别

    一般,我们看到术语"索引"和"键"交换使用,但实际上这两个是不同的.索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念.键代表创建来实施业务规则的完整性约 ...

  6. 主键primary key和唯一索引unique index

    1)主键一定是唯一性索引,唯一性索引并不一定就是主键. 2)主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引. 3)主键常常与外键构成参照完整性约束,防止出现数 ...

  7. MySQL唯一索引与主键的区别:主键相当于一本书的页码,索引相当于书的目录

    主键是一种约束,唯一索引是一种索引,两者在本质上是不同的: 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键: 主键列不允许为空值,唯一性索引列允许空值: 主键列在创建时,已经默认为非空值 ...

  8. oracle 主键、唯一键值、唯一索引关系

    一般都认为一条数据在表中通过主键字段来唯一确定,但是有时候表中并不存在主键,但是重复数据插入也会报错,查看表结构发现,通过建立唯一键值也可以达到之一目的,但是最近有遇到数据库中没有唯一键.主键,重复数 ...

  9. 索引,主键,唯一索引,联合索引的区别

    https://blog.csdn.net/qq_33275924/article/details/80220797 https://www.cnblogs.com/ymj0906/p/4240856 ...

最新文章

  1. kendoui仪表盘和柱状图 示例
  2. Darwin Streaming Server服务器mp4文件点播返回”415 Unsupported Media Type“错误
  3. SQL Server 2008 修改安装路径后安装出错的解决方法
  4. pandas:根据行间差值进行数据合并
  5. python实现决策树归纳_决策树【python实现】
  6. 人人网 api2.0 java_API2.0文档
  7. 2019中国互联网应用基本发展状况
  8. 编辑PDF时怎样删除文件中的图片
  9. 批量下载USGS的遥感影像
  10. S32K FTM(FlexTimer module)详解
  11. 外网访问内网FTP服务器
  12. 2D 横向对抗射击游戏之美
  13. 金九银十,为期2周的前端面经汇总(初级前端)
  14. Oracle to_date()函数的用法
  15. 开源PLM软件Aras详解三 服务端简易开发
  16. Java爬取王者荣耀英雄壁纸
  17. java的tey语句return了_Java中try、finally语句中有return时的执行情况
  18. 15. 弱人工智能、强人工智能、超人工智能
  19. windows服务器系统时间修改了还是不对
  20. python 如何自动生成exl_python如何做excel自动化

热门文章

  1. mysql容器重启数据是否丢失_docker容器重启 数据会丢吗
  2. 超强领先!Transformer图像复原效果显著!
  3. 基于RANSAC的激光点云分割
  4. 5中sender方法介绍_【成长】开学第一次自我介绍如何作?5步方法留下好印象受益5年...
  5. linux hive的作用,Hive的基本应用 - Hadoop和Hive的实践应用_服务器应用_Linux公社-Linux系统门户网站...
  6. wamp惯用的php框架_wamp集成环境php多版本搭建(php5.5,php5.6,php7.0.6)
  7. python中pass语句的作用是_Python pass语句以及作用详解
  8. python的os模块使用_Python之os模块的常见用法
  9. java程序 计算器_简单计算器(java)
  10. Server Less 助力前端全栈