​金仓数据库 KingbaseES 插件dbms_metadata


1. dbms_metadata介绍


DBMS_METADATA包是Kingbase数据库中提供的从数据库字典中以XML或者DDL语句形式检索元数据的一系列函数。
使用时需要create extension dbms_metadata,不需要时drop extension dbms_metadata即可。

 

2. 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);

参数说明:
表1 DBMS_METADATA.GET_DDL参数

参数名称

描述

OBJTYPE

指定对象的数据类型

OBJNAME

指定对象名

SCHEMA

指定对象的模式名,默认值是NULL

VERSION

指定元数据的版本,默认值是NULL

MODEL

指定要使用的对象的模型,默认值是NULL

TRANSFORM

指定输出转换的名称,默认值是NULL

NOTE:

  •         VERSION,MODEL,TRANSFORM这三个参数值在目前的KingbaseES中暂时不做处理。
  •         参数内容大小写不敏感。

返回值类型:
以TEXT返回指定对象的DDL语句。暂不支持指定输出转换类型。
1、对于TABLE类型的对象,该函数的返回值包含以下内容:

  • SCHEMA名;
  • TABLE名;
  • 列名,列的数据类型,默认值,约束;
  • FOREIGN KEY;(如果存在)
  • PARTITION类型和字段;(如果存在)

2、返回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)


参考资料

更多金仓数据库 KingbaseES 信息,详见 KingbaseES 产品手册


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值