キーインデックスとサブパーティションのユニークなビューを取得kingbase7

-构造表
表ZYJ.TEST(ID INT PRIMARY KEY、NAME VARCHAR(200)、ADDR VARCHAR(200)、TEL VARCHAR(11))を作成します。
ALTER TABLE ZYJ.TESTが列を追加VARCHAR1 VARCHAR(200)。
ALTER TABLE ZYJ.TESTが列を追加VARCHAR2 VARCHAR(200)。
ALTER TABLE ZYJ.TESTが列を追加VARCHAR3 VARCHAR(200)。

ZYJ.TEST ON INDEX IDX_ADDR(ADDR)を作成します。
CREATE UNIQUE INDEX IDX_TEL ON ZYJ.TEST(TEL)。
ZYJ.TEST(VARCHAR1、VARCHAR2、VARCHAR3)にユニーク・インデックスIDXU_VARCHAR123を作成します。

-構成を示すシステム構成図で
TABLE ZYJ.SYS_ATTRIBUTE AS SELECT * FROM作成SYS_ATTRIBUTE ATTR WHERE ATTR.ATTRELID = 16493。

INDRELID = 16493 SYS_INDEX INDEX SELECT * FROM TABLE AS ZYJ.SYS_INDEXを作成します。
-------------------------------------------------- -------------------------------------------------- ----------------------
-获取索引名称的函数
としての機能をZYJ.GET_COL_INDEXSを作成するか、またはREPLACE(TABOID OID、colNum引数INT4)返信テキスト
DECLAREの
indexs_textのTEXT。
index_record記録。
temp_index_oid OID;
BEGIN
indexs_text:= NULLを。
temp_index_oid:= NULL;
SELECT CLASS.RELNAMEの索引名、ATTR.ATTNAMEのCOLNAME、IN index_recordのため、INDEX.INDEXRELIDはindexoid
SYS_INDEX INDEX、SYS_CLASS CLASS、SYS_ATTRIBUTE ATTR FROM
WHERE taboid = INDEX.INDRELID AND colNum引数=任意の(INDEX.INDKEY)AND INDEX.INDEXRELID = CLASS.OID
AND ATTR.ATTRELID = INDEX.INDRELIDとindexoid BY ATTR.ATTNUM =任意の(INDEX.INDKEY)ORDER
LOOP - indexsとカラム情報を取得
temp_index_oid = index_record.indexoid THEN IF
indexs_text:= CONCAT(indexs_text、 '');
indexs_text:= CONCAT(indexs_text、index_record.colname)。
ELSE
indexs_textは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 LOOP;
indexs_textはNULL THENされていない場合
indexs_text:= CONCAT(indexs_text、 ')');
END IF;
indexs_text返します。
ENDのGET_COL_INDEXS。
-------------------------------------------------- -------------------------------------------------- ----------------------
SELECT CASE WHEN IS_UNIQUE_INDEX、AS INDEX.INDISPRIMARYは= FALSE AND INDEX.INDISUNIQUE = TRUE THEN 1 ELSE 0 END
INDEX.INDISPRIMARY、INDEX。 INDISUNIQUE、C.OID、INDEX.INDRELID、INDEX.INDEXRELID、
(((SYS_NAMESPACE.NSPNAME SELECT CAST
SYS_NAMESPACE FROM
NSPNAMEなどの文字VARYING(30バイト)のAS SYS_NAMESPACE.OID = C.RELNAMESPACEを)))、
COLUMN_NAME、CAST(AS TABLE_NAME、CAST(文字VARYING(30バイト)のAS ATTR.ATTNAME)AS CAST(文字VARYING(30バイト)のAS C.RELNAME)
ケースT.TYPNAME
'BPCHAR' THEN 'CHAR'
ELSE CAST(T TEXT)AS .TYPNAME
DATA_TYPE_OWNER、CAST(AS DATA_TYPE_MOD、CAST CHARACTERのVARYING(30バイト)のAS(AU.ROLNAME)AS DATA_TYPE、CAST(NULL AS文字VARYING(3 CHAR))などの文字VARYING(106バイト)のAS END)
CASE
WHEN ATTR.ATTLEN =(-1)THEN
CASE T.TYPNAME
WHEN 'BIT' THEN
CASE ATTR.ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'BITのVARYING' THEN
CASE ATTR.ATTTYPMOD >> 16
((ATTR.ATTTYPMOD >> 16)<< 16) - 0 THEN ATTR.ATTTYPMOD
ELSE 0
END
'TIMETZ' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16 )<< 16)
ELSE 0
END
'TIME' THEN
CASE ATTR.ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'TIMESTAMPTZ' THEN
CASE ATTR .ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'TIMESTAMP' THEN
CASE ATTR.ATTTYPMOD >> 16
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
'VARBIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'VARCHAR' THEN
CASE ATTR.ATTTYPMOD
(-1)THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
'BPCHAR' THEN
CASE ATTR.ATTTYPMOD
(-1)THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
ELSE
CASE ATTR.ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<<16) - 4
ELSE 0
END
END
ELSE CAST(ATTR.ATTLEN AS INTEGER)
DATA_LENGTH、CAST(AS NUMERIC AS END(10,0))
CASE CAST(
CASE T.TYPNAME
'BPCHAR' THEN 'CHAR'
ELSE CAST(T.TYPNAME AS TEXT)
AS END CHARACTERのVARYING(106バイト)の)
'数値'はTHEN
ケース
ATTR.ATTTYPMODは=(-1)THEN CAST(数値AS 38(38,0))
ELSE CAST(((ATTR.ATTTYPMOD - 4)>> 16)AS NUMERIC(38,0))&BITTONUMERIC(B'1111111111111111' )
END
'FLOAT4' THEN NUMERIC(38,0 AS CAST(7))
'FLOAT8'はTHEN(数値(38,0 AS 15)キャスト)
ELSE NULL
NUMERIC(10,0)AS END)DATA_PRECISION、CAST(AS
ケースCAST(
CASE T.TYPNAME
'BPCHAR'THEN 'CHAR'
ELSE CAST(TEXT AS T.TYPNAME)
CHARACTERのVARYING(106バイト))などのエンド
NUMERIC(38,0))&BITTONUMERIC(B'1111111111111111' AS) - 'NUMERIC' THEN CAST(4(ATTR.ATTTYPMOD)
ELSE NULL
DATA_SCALE、CAST(INTEGER AS IF(CAST(ATTR.ATTNOTNULL)、 'N'、 'Y')AS NUMERIC(10,0)とEND)文字VARYING(1つのCHAR)AS)NULLABLE、AS CAST(ATTR.ATTNUM AS COLUMN_ID、CAST(AS NUMERIC(10,0))
CASEのATTR.ATTHASDEF
偽THEN NULL
ELSE CAST(
CASE
ATTR.ATTLEN =(-1)THEN
CASE T.TYPNAME
'ビット' 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
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'TIMETZ' THEN
CASE ATTR.ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ( (ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'TIME' THEN
CASE ATTR.ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
WHEN 'TIMESTAMPTZ' THEN
CASE ATTR.ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'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
'VARBIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'VARCHAR' THEN
CASE ATTR.ATTTYPMOD
(-1)THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
'BPCHAR' THEN
CASE ATTR.ATTTYPMOD
(-1)THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
ELSE
ケースATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR。ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16) - 4
ELSE 0
ENDの
END
ELSE CAST(ATTR.ATTLEN AS INTEGER)
NUMERIC(10,0))などのエンド
DATA_DEFAULT数値AS CAST(0 AS DEFAULT_LENGTH、DEF.ADSRC AS NUMERIC(10,0))AS END(10,0) )DENSITY、CAST(0 AS AS HIGH_VALUE、CAST(数値AS 0(10,0))AS LOW_VALUE、CAST(0 10.0(数値AS))AS NUM_DISTINCT、CAST(数値(10,0 AS 0))AS NUM_NULLS、(NUMERIC(10,0 AS 0)CAST)NUM_BUCKETS AS、CAST AS NUMERIC(10,0))(NULL AS TIMESTAMP(0)LAST_ANALYZED、CAST AS TIME ZONE)なし(NUMERIC AS 0(10,0)) SAMPLE_SIZE AS、CAST(NULL AS文字VARYING(44 CHAR))GLOBAL_STATS、CAST(AS CHAR_COL_DECL_LENGTH、CAST( 'NO'文字のVARYING(3 CHAR)AS」)AS CHARACTER_SET_NAME、CAST(数値(10,0)AS 0)AS USER_STATS、AVG_COL_LEN、CAST(AS CAST(NUMERIC(10,0 AS 0))などの文字VARYING(3 CHAR))AS「NO
CASEのCAST(
CASE T.TYPNAME
'BPCHAR' THEN 'CHAR'
ELSE CAST(T.TYPNAMEテキストなど)
END CHARACTERのVARYING(106バイト))ANY(ARRAY [ 'VARCHAR'、 'BPCHAR'、 'NCHAR'、 'NVARCHARを' = AS ])
WHEN真THEN CAST(
CASE
ATTR.ATTLEN =(-1)THEN
CASE T.TYPNAMEは
THEN WHEN 'BIT'
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16) << 16)
ELSE 0
END
'ビット・VARYING' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'TIMETZ' THEN
CASE ATTR .ATTTYPMOD >>16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
WHEN '時間' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'TIMESTAMPTZ' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'TIMESTAMP' THEN
CASE ATTR.ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16 )<< 16)
ELSE 0
END
'INTERVAL' THEN
CASE ATTR.ATTTYPMOD >> 16
0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<<16)
ELSE 0
END
'VARBIT' THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)<< 16)
ELSE 0
END
'VARCHAR' THEN
CASE ATTR.ATTTYPMOD
(-1)THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
'BPCHAR' THEN
CASE ATTR.ATTTYPMOD
(-1)THEN NULL
ELSE ABS(ATTR.ATTTYPMOD) - 4
END
ELSE
ケースATTR.ATTTYPMOD >> 16
WHEN 0 THEN ATTR.ATTTYPMOD - ((ATTR.ATTTYPMOD >> 16)< <16) - 4
ELSE 0
ENDの
END
ELSE CAST(ATTR.ATTLEN AS INTEGER)
NUMERIC(10,0))AS END
ELSE CAST(0 NUMERIC AS(38,0))
CHAR_LENGTH AS NUMERIC(10,0)とEND) 、CAST(
CASE(CAST(
CASEのT.TYPNAME
'BPCHAR' THEN 'CHAR' WHEN
ELSE CAST(TEXT AS T.TYPNAME)
CHARACTERのVARYING(106バイト)のAS END)は、任意の(ARRAY [ 'VARCHAR'、 'BPCHAR'、 'NCHAR'、 'NVARCHARを']))= AND ATTR.ATTTYPMOD <>(-1)
WHEN真THEN
CASE ATTR.ATTTYPMOD >> 16
WHEN 0 THEN 'C'
ELSE 'B'
END
ELSE NULL
CHARACTERのVARYING(1つのCHAR)AS END)CHAR_USED AS、V80_FMT_IMAGE AS CAST( 'NO'文字のVARYING(3 CHAR AS))、DATA_UPGRADED AS CAST( 'NO'文字のVARYING(3 CHAR AS))、CAST( 'NO' AS CHARACTERのVARYING(3 CHAR))VIRTUAL_COLUMN、SEGMENT_COLUMN_ID、数字(10、AS CAST(ATTR.ATTNUM AS CAST(数値(10,0 AS 0))AS(文字VARYING(3 CHAR AS 'NO')HIDDEN_COLUMN、CAST)AS 0))のIsEncrypted、可変文字AS CAST(ATTR.ATTCOMPMETHOD AS ATTR.ATTISENCRYPTED QUALIFIED_COL_NAME AS INTERNAL_COLUMN_ID、CAST(NULL AS文字VARYING(15 CHAR))HISTOGRAM、CAST(NULL AS文字としてVARYING(4000 CHAR))、AS(1 CHAR)) "STORAGE"、CAST((( "IDENTITY" .RELNAMEを選択するとCOMPMETHOD、CAST CHARACTERのVARYING(1つのCHAR)AS(ATTR.ATTSTORAGE)AS
SYS_CLASSの"IDENTITY"
ここで、 "同一性" .OID = ATTR.ATTSEQOID))文字VARYING(30バイト)のAS)IDENTITY_NAME、GET_COL_CHECKS(ATTR.ATTRELID、CAST(整数としてATTR.ATTNUM))などのチェックなど、GET_COL_FOREIGNS(ATTR.ATTRELID、CAST(ATTR FOREIGNS、GET_COL_PRIMARY(ATTR.ATTRELID、CASTユニークAS PRIMARY_KEY AS INTEGER AS(ATTR.ATTNUM))、GET_COL_UNIQUES(ATTR.ATTRELID、CAST(整数としてATTR.ATTNUM))AS INTEGER AS .ATTNUM))、ARRAY_CAT(ATTR.ATTACL助成金AS、C.RELACL)、
GET_COL_INDEXS(C.OID整数として、CAST(ATTR.ATTNUM)INDEXS AS)、
CAST((((SELECT
CASEのPARTTABLES.PARTITIONKEYを
NULL THEN NULL
ELSE
CASE STRPOS(PARTTABLES.PARTITIONKEY、CAST( TEXT AS ATTR.ATTNAME))
WHEN 0 THEN NULL
ELSE PARTTABLES.PARTITIONTYPE
ENDの
"CASE" AS END
SYS_PARTTABLES PARTTABLES、SYS_NAMESPACE名前空間の
WHERE PARTITIONTYPE、AS CAST(C.RELNAME AS TEXT)= PARTTABLES.TABLENAME AND NAMESPACE.OID = C.RELNAMESPACEと文字VARYING(30バイト)のAS NAMESPACE.NSPNAME = PARTTABLES.SCHEMANAME))))( SELECT
CASEのPARTTABLES.PARTITIONKEY
WHEN NULL THEN NULL
ELSE
CASE STRPOS(PARTTABLES.PARTITIONKEY、CASTテキストとして(ATTR.ATTNAME))
0 THEN NULL
ELSE PARTTABLES.PARTITIONKEY
ENDの
"ケース"などのエンド
SYS_PARTTABLES PARTTABLES FROM、SYS_NAMESPACE名前空間
WHERE CAST(C PartitionKey AS .RELNAME AS TEXT)= PARTTABLES.TABLENAME AND NAMESPACE.OID = C.RELNAMESPACE AND NAMESPACE.NSPNAME = PARTTABLES.SCHEMANAME)
SYS_INDEX INDEX、SYS_CLASS C、SYS_TYPE T、SYS_AUTHID AU、SYS_ATTRIBUTE ATTR FROM
LEFT JOIN SYS_ATTRDEF DEF ON ATTR.ATTNUM = DEF.ADNUM AND ATTR.ATTRELID = DEF.ADRELID
ATTR.ATTNUM> 0 AND ATTR.ATTTYPID = T.OID AND ATTR.ATTRELID = C.OID AND T.TYPOWNER = AU.OID
AND ATTR.ATTRELID = INDEX.INDRELID
AND ATTR.ATTNUM =任意(INDEX.INDKEY)
AND NSPNAME = 'ZYJ' AND TABLE_NAME = 'TEST'。

おすすめ

転載: www.cnblogs.com/buffercache/p/11391974.html