17. dbms_metadata
17.1. 插件dbms_metadata简介
DBMS_METADATA包是Kingbase数据库中提供的从数据库字典中以XML或者DDL语句形式检索元数据的一系列函数。
使用时需要create extension dbms_metadata,不需要时drop extension dbms_metadata即可。
插件名为 dbms_metadata
插件版本 V1.0
17.2. 插件dbms_metadata加载方式
CREATE EXTENSION dbms_metadata;
17.3. 插件dbms_metadata的参数配置
无需配置任何参数。
17.4. 插件dbms_metadata使用方法
17.4.1. DBMS_METADATA.GET_DDL
功能
KingbaseES兼容ORACLE的DBMS_METADATA.GET_DDL()函数。该函数用于创建特定类型对象的DDL语句。
目前可支持获取以下类型对象的DDL
TABLE
VIEW
INDEX
FUNCTION
PROCEDURE
TRIGGER
SEQUENCE
DBLINK
SYNONYM
语法格式
使用该函数前需要先创建DBMS_METADATA扩展。
DBMS_METADATA.GET_DDL( OBJTYPE VARCHAR2(63), OBJNAME VARCHAR2(63), SCHEMA VARCHAR2(63) DEFAULT NULL, VERSION VARCHAR2(63) DEFAULT NULL, MODEL VARCHAR2(63) DEFAULT NULL, TRANSFORM VARCHAR2(63) DEFAULT NULL);
参数说明
参数名称 | 描述 |
|---|---|
OBJTYPE | 指定对象的数据类型 |
OBJNAME | 指定对象名 |
SCHEMA | 指定对象的模式名,默认值是NULL |
VERSION | 指定元数据的版本,默认值是NULL |
MODEL | 指定要使用的对象的模型,默认值是NULL |
TRANSFORM | 指定输出转换的名称,默认值是NULL |
注意
VERSION,MODEL,TRANSFORM这三个参数值在目前的KingbaseES中暂时不做处理。
参数内容大小写不敏感。
返回值类型
以TEXT返回指定对象的DDL语句。暂不支持指定输出转换类型。
对于TABLE类型的对象,该函数的返回值包含以下内容
SCHEMA名;
TABLE名;
列名,列的数据类型,默认值,约束;
FOREIGN KEY;(如果存在)
PARTITION类型和字段;(如果存在)
返回TEXT内容全为大写。
权限
DBA创建DBMS_METADATA扩展后,允许其他用户执行该扩展下的GET_DDL函数,暂不支持跨模式调用。
示例
--TABLE
CREATE TABLE test_tab1(
a smallserial,
b int,
c text,
d text default 'KB',
e text
) PARTITION BY HASH(a,c,e);
SELECT dbms_metadata.get_ddl('table', 'test_tab1');
get_ddl
---------------------------------
CREATE TABLE PUBLIC.TEST_TAB1( +
A SMALLSERIAL NOT NULL, +
B INTEGER, +
C TEXT, +
D TEXT DEFAULT 'KB'::TEXT, +
E TEXT +
) +
PARTITION BY HASH (A, C, E) +
(1 row)
--FUNCTION
CREATE FUNCTION test_func1(text, pg_catalog.date) RETURNS bool LANGUAGE 'sql'
AS 'SELECT $1 = ''abcd'' AND $2 > ''2001-01-01''';
SELECT dbms_metadata.get_ddl('FUNCTION', 'TEST_FUNC1');
get_ddl
---------------------------------------------------------------------
CREATE OR REPLACE FUNCTION PUBLIC.TEST_FUNC1(TEXT, PG_CATALOG.DATE)+
RETURNS BOOLEAN +
LANGUAGE SQL +
AS $FUNCTION$SELECT $1 = 'ABCD' AND $2 > '2001-01-01'$FUNCTION$ +
(1 row)
--INDEX
CREATE TABLE test_tab5(a varchar(32), b varchar(32));
CREATE INDEX idx5 ON test_tab5((a||' '||b));
SELECT dbms_metadata.get_ddl('INDEX', 'idx5');
get_ddl
-------------------------------------------------------------------------------------- ---------
CREATE INDEX IDX5 ON PUBLIC.TEST_TAB5 USING BTREE (((((A)::TEXT || ' '::TEXT) || (B) ::TEXT)))+
(1 row)
17.5. 插件dbms_metadata卸载方法
DROP EXTENSION dbms_metadata;
17.6. 插件dbms_metadata升级方法
ALTER EXTENSION dbms_metadata UPDATE;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




