zoukankan      html  css  js  c++  java
  • kingbase7获取唯一索引和子分区键的view

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

  • 相关阅读:
    char类型到底是有符号还是无符号
    GNU C编译器的gnu11和c11
    kotlin之包
    mysql 各个版本驱动jar包
    网络优化
    Android 布局优化
    Android之MVVM开发模式
    Android蓝牙开发技术学习总结
    Android 电量优化
    Android中图片优化
  • 原文地址:https://www.cnblogs.com/buffercache/p/11391974.html
Copyright © 2011-2022 走看看