oracle查看字典结构体,oracle获取数据字典定义详细总结

在日常工作中,经常有人通过工具去查看对象的定义,其实有时候这样去查看也很烦的。在工作中,也有同事问我怎么获取对象定义,今天我做个总结给大家,希望对大家有所帮助!

获取对象定义的包为:dbms_metadata,其中的get_ddl函数是获取对象的函数

GET_DDL函数返回创建对象的原数据的DDL语句,参数说明

1、object_type ---需要返回原数据的DDL语句的对象类型

2、name --- 对象名称

3、schema ---对象所在的Schema,默认为当前用户所在所Schema

4、version ---对象原数据的版本

5、model ---原数据的类型默认为ORACLE

6、transform. - XSL-T transform. to be applied.

7、RETURNS: 对象的原数据默认以CLOB类型返回

其中,我们经常用到的是前三项。

dbms_metadata包中的get_ddl函数定义:

FUNCTION get_ddl ( object_type IN VARCHAR2,

name IN VARCHAR2,

schema IN VARCHAR2 DEFAULT NULL,

version IN VARCHAR2 DEFAULT 'COMPATIBLE',

model IN VARCHAR2 DEFAULT 'ORACLE',

transform. IN VARCHAR2 DEFAULT 'DDL') RETURN CLOB;

注意:

1、如果使用sqlplus需要进行下列格式化,特别需要对long进行设置,否则无法显示完整的SQL

2、参数要使用大写,否则会查不到

set linesize 400

set pages 0

set long 10000

1、查看数据库表的定义写法:

select dbms_metadata.get_ddl('TABLE','TABLENAME','USERNAME') from dual;

2、查看索引的SQL

select dbms_metadata.get_ddl('INDEX','INDEXNAME','USERNAME') from dual;

3、查看创建主键的SQL

SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','CONSTRAINTNAME','USERNAME') FROM DUAL;

4、查看创建外键的SQL

SELECT DBMS_METADATA.GET_DDL('REF_CONSTRAINT','REF_CONSTRAINTNAME','USERNAME') FROM DUAL;

5、查看创建视图的SQL

SELECT DBMS_METADATA.GET_DDL('VIEW','VIEWNAME','USERNAME') FROM DUAL;

6、查看用户的SQL

SELECT DBMS_METADATA.GET_DDL('USER','USERNAME') FROM DUAL;

7、查看角色的SQL

SELECT DBMS_METADATA.GET_DDL('ROLE','ROLENAME') FROM DUAL;

8、查看表空间的SQL

SELECT DBMS_METADATA.GET_DDL('TABLESPACE','TABLESPACENAME') FROM DUAL;

9、获取物化视图SQL

select dbms_metadata.get_ddl('MATERIALIZED VIEW','MVNAME') FROM DUAL;

10、获取远程连接定义SQL

SELECT dbms_metadata.get_ddl('DB_LINK','DBLINKNAME','USERNAME') stmt FROM dual

11、获取用户下的触发器SQL

select DBMS_METADATA.GET_DDL('TRIGGER','TRIGGERNAME','USERNAME) FROM DUAL;

12、获取用户下的序列

select DBMS_METADATA.GET_DDL('SEQUENCE','SEQUENCENAME') from  DUAL;

13、获取用户下的函数

select DBMS_METADATA.GET_DDL('FUNCTION','FUNCTIONNAME','USERNAME') from DUAL

14、获取包的定义

select DBMS_METADATA.GET_DDL('PACKAGE','PACKAGENAME','USERNAME') from  dual

15、获取存储过程

select DBMS_METADATA.GET_DDL('PROCEDURE','PROCEDURENAME','USERNAME') from  dual

16、获取包体定义

select DBMS_METADATA.GET_DDL('PACKAGE BODY','PACKAGEBODYNAME','USERNAME') from  dual

17、获取远程数据库对象的定义

SELECT DBMS_LOB.SUBSTR@dblinkname(DBMS_METADATA.GET_DDL@dblinkname('TABLE', 'TABLENAME', 'USERNAME')) FROM DUAL@dblinkname

18、获取多个对象的定义

SELECT DBMS_METADATA.GET_DDL(O.OBJECT_TYPE, O.object_name,O.OWNER)

FROM DBA_OBJECTS O

where O.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE','FUNCTION') and ONWER = 'ONWERNAME';

这个语句可以更改一下,就可以得到很多语句出来

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
读取Oracle数据库数据可以使用OCI(Oracle Call Interface)进行编程,而结构体中各字段的值可以通过查询结果集(ResultSet)中每一列的值来获取。以下是一个简单的示例代码: ```c++ #include <iostream> #include <oci.h> using namespace std; int main() { OCIEnv* env = nullptr; OCIError* err = nullptr; OCISvcCtx* svc = nullptr; OCIStmt* stmt = nullptr; OCIDefine* def = nullptr; OCIDateTime* dt = nullptr; OCIInterval* interval = nullptr; sword status = 0; // 初始化OCI环境 OCIEnvCreate(&env, OCI_THREADED, nullptr, nullptr, nullptr, nullptr, 0, nullptr); // 分配OCI错误句柄 OCIHandleAlloc(env, (void**)&err, OCI_HTYPE_ERROR, 0, nullptr); // 分配OCI服务句柄 OCIHandleAlloc(env, (void**)&svc, OCI_HTYPE_SVCCTX, 0, nullptr); // 连接Oracle数据库 OCILogon2(env, err, &svc, "username", strlen("username"), "password", strlen("password"), "database", strlen("database"), OCI_DEFAULT); // 分配OCI语句句柄 OCIHandleAlloc(env, (void**)&stmt, OCI_HTYPE_STMT, 0, nullptr); // 准备SQL语句 OCIStmtPrepare(stmt, err, "SELECT col1, col2, col3 FROM table", strlen("SELECT col1, col2, col3 FROM table"), OCI_NTV_SYNTAX, OCI_DEFAULT); // 执行SQL语句 OCIStmtExecute(svc, stmt, err, 1, 0, nullptr, nullptr, OCI_DEFAULT); // 定义结果集中每一列对应的变量 int col1 = 0; char col2[64] = { 0 }; double col3 = 0.0; OCIDateTimeConstruct(env, err, &dt, 0, 0, 0, 0, 0); OCIIntervalConstruct(env, err, &interval, 0, 0, 0, 0, 0); OCIStmtFetch2(stmt, err, 1, OCI_FETCH_NEXT, 0, OCI_DEFAULT); // 获取结果集中每一列的值 OCIDefineByPos(stmt, &def, err, 1, &col1, sizeof(int), SQLT_INT, nullptr, nullptr, nullptr, OCI_DEFAULT); OCIDefineByPos(stmt, &def, err, 2, col2, sizeof(col2), SQLT_STR, nullptr, nullptr, nullptr, OCI_DEFAULT); OCIDefineByPos(stmt, &def, err, 3, &col3, sizeof(double), SQLT_FLT, nullptr, nullptr, nullptr, OCI_DEFAULT); // 输出每一列的值 cout << "col1 = " << col1 << endl; cout << "col2 = " << col2 << endl; cout << "col3 = " << col3 << endl; // 释放OCI资源 OCIStmtRelease(stmt, err, nullptr, 0, OCI_DEFAULT); OCIHandleFree(stmt, OCI_HTYPE_STMT); OCIIntervalFree(env, interval); OCIDateTimeFree(env, dt); OCIHandleFree(svc, OCI_HTYPE_SVCCTX); OCIHandleFree(err, OCI_HTYPE_ERROR); OCIHandleFree(env, OCI_HTYPE_ENV); return 0; } ``` 这个示例代码中,使用OCI连接Oracle数据库,然后执行一个SELECT语句,获取结果集中每一列的值,最后输出这些值。其中,定义了一个结构体来存储每一行的数据,可以通过将每一列的值赋值给结构体中对应的字段来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值