首批通过分布式安全可靠测评,为关键业务系统打造
GET_DDL
更新时间:2024-12-03 23:00:00
GET_DDL 函数用于调用单个对象的元数据作为 DDL 返回。它用来提取数据库对象(如 TABLE、VIEW、INDEX、PROCEDURE、SEQUENCE、TRIGGER、SYNONYM、FUNCTION、PACKAGE 等)的 DDL(Data Definition Language)语句。
GET_xxx 函数用于通过一次调用获取对象的元数据。目前 OceanBase 数据库当前版本仅支持 GET_DDL。
功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版仅提供 MySQL 模式。
语法
FUNCTION GET_DDL (
object_type VARCHAR,
name VARCHAR,
ob_schema VARCHAR DEFAULT NULL,
version VARCHAR DEFAULT 'COMPATIBLE',
model VARCHAR DEFAULT 'ORACLE',
transform VARCHAR DEFAULT 'DDL')
RETURN CLOB;
参数解释
| 参数 | 解释 |
|---|---|
| object_type | 要检索的对象的类型。对象类型的属性必须是一个已命名对象。当前支持的对象类型包括 TABLE、VIEW、MATERIALIZED_VIEW、INDEX、PROCEDURE、SEQUENCE、TRIGGER、SYNONYM、FUNCTION、PACKAGE。 |
| name | 对象的名称。 |
| ob_schema | 包含该对象的 Schema。默认为调用者的 Schema。 |
| version | 对象的 metadata 版本。 |
| model | metadata 的对象模型。 |
| transform | 应用 XSL-T 转换输出结果。 |
示例
简单示例
以下是针对不同对象类型的示例 SQL 语句,它们演示了如何使用 GET_DDL 获取相应的 DDL。请注意,这些示例中的对象名(如 'MY_TABLE_NAME')需要替换为你数据库中实际存在的对象名。
提取表(TABLE)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE_NAME') FROM DUAL;提取视图(VIEW)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('VIEW', 'MY_VIEW_NAME') FROM DUAL;提取物化视图(MATERIALIZED VIEW)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', 'MY_MATERIALIZED_VIEW_NAME') FROM DUAL;提取索引(INDEX)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('INDEX', 'MY_INDEX_NAME') FROM DUAL;提取存储过程(PROCEDURE)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('PROCEDURE', 'MY_PROCEDURE_NAME') FROM DUAL;提取序列(SEQUENCE)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('SEQUENCE', 'MY_SEQUENCE_NAME') FROM DUAL;提取触发器(TRIGGER)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('TRIGGER', 'MY_TRIGGER_NAME') FROM DUAL;提取同义词(SYNONYM)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('SYNONYM', 'MY_SYNONYM_NAME') FROM DUAL;提取函数(FUNCTION)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('FUNCTION', 'MY_FUNCTION_NAME') FROM DUAL;提取包(PACKAGE)的 DDL 语句:
SELECT DBMS_METADATA.GET_DDL('PACKAGE', 'MY_PACKAGE_NAME') FROM DUAL;
完整示例
我们将展示两个完整的示例来说明如何使用 GET_DDL。
- 示例 1:创建一个名为 tEst 的函数,它接受三个参数:一个整数 tEst、一个字符串 "nAMe" 和一个浮点数 age。函数的返回类型为浮点数。
create function tEst(tEst int, "nAMe" varchar2, age float)
return float
as
begin
return age;
end;
/
-- 设置服务器输出,允许在控制台打印消息。
set serveroutput on;
-- 调用 `DBMS_METADATA.GET_DDL` 函数以获取名为 'TEST' 的函数的 DDL 语句。
call dbms_output.put_line(dbms_metadata.get_ddl('FUNCTION','TEST'));
DBMS_METADATA.GET_DDL 返回的是创建对象的 DDL 语句。
返回结果如下所示:
CREATE OR REPLACE PROCEDURE "SYS"."TEST"
(
"TEST" IN int, "nAMe" IN varchar2, "AGE" IN float
) IS
begin
null;
end
- 示例 2:创建了一个名为 tEst1 的存储过程,它接受三个参数:一个整数 tEst1、一个字符串 "nAMe" 和一个浮点数 age。
create procedure tEst1(tEst1 int, "nAMe" varchar2, age float)
as
begin
null;
end;
/
-- 设置服务器输出,允许在 SQL 命令行界面打印消息。
set serveroutput on;
-- 调用 DBMS_METADATA.GET_DDL 函数获取名为 'TEST1' 的存储过程的 DDL 语句。
call dbms_output.put_line(dbms_metadata.get_ddl('PROCEDURE','TEST1'));
返回的是一个为过程 TEST1 创建的 DDL 语句。
返回结果如下所示:
CREATE OR REPLACE PROCEDURE "SYS"."TEST1"
(
"TEST1" IN int, "nAMe" IN varchar2, "AGE" IN float
) IS
begin
null;
end