建了一个外部表,想看看这个表的信息,一查就报错了:

SQL> select dbms_metadata.get_ddl('TABLE','ext_case1') from dual;

ERROR:

ORA-31603: object "ext_case1" of type TABLE not found in schema "SCOTT"

ORA-06512: at "SYS.DBMS_METADATA", line 1546

ORA-06512: at "SYS.DBMS_METADATA", line 1583

ORA-06512: at "SYS.DBMS_METADATA", line 1901

ORA-06512: at "SYS.DBMS_METADATA", line 2792

ORA-06512: at "SYS.DBMS_METADATA", line 4333

ORA-06512: at line 1

no rows selected

看看表时候存在,表确实是存在的:

SQL> select * from ext_case1;

ENAME    JOB                                 SAL

----------     --------------------         ----------

SMITH      CLEAK                            3904

ALLEN     SALESMAN                     2891

WARD     SALESMAN                      3128

KING       PRESIDENT                     2523

SQL>

郁闷了,换sysdba用户试了一下,错误依然,有检查了一遍,还是不知道错误在那里,不想弄了,也不想看书了,下去买了瓶水,回来又试了一把,还是错误。

不解决不死心,google一把,悲剧了,google又间歇性的瘫痪了,无奈baidu,找到一个答案说是用户没有查询权限。

给scott赋权限:

SQL> grant select_catalog_role to scott;

Grant succeeded.

SQL>

再查询还是不行,唉。。。打开google,google正常工作了。又找到一个答案,说是get_ddl里的参数都要大写。

SQL> select dbms_metadata.get_ddl('TABLE','EXT_CASE1') from dual;

DBMS_METADATA.GET_DDL('TABLE','EXT_CASE1')

--------------------------------------------------------------------------------

CREATE TABLE "SCOTT"."EXT_CASE1"

( "ENAME" VARCHAR2(10),

"JOB" VARCHAR2

SQL>

输出的信息好像没有显示全,要设置一下sqlplus的long的设置来改变显示的长度,默认的long是80:

SQL> set long 2000

SQL> select dbms_metadata.get_ddl('TABLE','EXT_CASE1') from dual;

DBMS_METADATA.GET_DDL('TABLE','EXT_CASE1')

--------------------------------------------------------------------------------

CREATE TABLE "SCOTT"."EXT_CASE1"

( "ENAME" VARCHAR2(10),

"JOB" VARCHAR2(20),

"SAL" NUMBER

)

ORGANIZATION EXTERNAL

( TYPE ORACLE_LOADER

DEFAULT DIRECTORY "EXTDIR"

ACCESS PARAMETERS

( records delimited by newline

DBMS_METADATA.GET_DDL('TABLE','EXT_CASE1')

--------------------------------------------------------------------------------

skip 6

fields terminated by ","

(ename,job,sal)

)

LOCATION

( 'ldr_case1.ctl'

)

)

SQL>

另外DBMS_METADATA.GET_DDL默认的是查看当前用户的信息,如果你以用户A来查看用户B的表要在dbms_metadata.get_ddl的第三个参数里加上表/表空间的schmea,否则就会报ORA-31603。

以sysdba查看scott的表(不加schmea):

SQL> show user

USER is "SYS"

SQL> select dbms_metadata.get_ddl('TABLE','BONUS') from dual;

ERROR:

ORA-31603: object "BONUS" of type TABLE not found in schema "SYS"

ORA-06512: at "SYS.DBMS_METADATA", line 1546

ORA-06512: at "SYS.DBMS_METADATA", line 1583

ORA-06512: at "SYS.DBMS_METADATA", line 1901

ORA-06512: at "SYS.DBMS_METADATA", line 2792

ORA-06512: at "SYS.DBMS_METADATA", line 4333

ORA-06512: at line 1

no rows selected

SQL>

以sysdba查看scott的表(加schmea):

SQL> show user

USER is "SYS"

SQL> select dbms_metadata.get_ddl('TABLE','BONUS','SCOTT') from dual;

DBMS_METADATA.GET_DDL('TABLE','BONUS','SCOTT')

--------------------------------------------------------------------------------

CREATE TABLE "SCOTT"."BONUS"

("ENAME" VARCHAR2(10),

"JOB" VARCHAR2(9),

"SAL" NUMBER,

"COMM" NUMBER

) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

TABLESPACE "USERS"

DBMS_METADATA.GET_DDL('TABLE','BONUS','SCOTT')

--------------------------------------------------------------------------------

SQL>

总结:

1)dbms_metadata.get_ddl()包()内的参数都要大写。
2)是否查的当前用户的DDL,不是要加上对象的schmea。
3)如果信息显示不全,set long 9999(随便设置他的大小,就是为了完全显示查找的结果)。

使用dbms_metadata.get_ddl遇到ORA-31603的更多相关文章

  1. 【转载】oracle dbms_metadata.get_ddl的使用方法总结

    转自:http://www.jb51.net/article/39715.htm dbms_metadata.get_ddl()用于获取对象的ddl,其具体用法如下. 注意:在sqlplus里,为了更 ...

  2. 利用dbms_metadata.get_ddl查看DDL语句

    http://www.cnblogs.com/aocle/archive/2011/10/13/2209790.html 当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metada ...

  3. Oracle利用dbms_metadata.get_ddl查看DDL语句

    当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...

  4. dbms_metadata.get_ddl的用法(DDL)

    dbms_metadata包中的get_ddl函数 --GET_DDL: Return the metadata for a single object as DDL. -- This interfa ...

  5. Oracle中的dbms_metadata.get_ddl的用法

    当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...

  6. dbms_metadata.get_ddl的用法

    --GET_DDL: Return the metadata for a single object as DDL. -- This interface is meant for casual bro ...

  7. 基于DBMS_METADATA.GET_DDL函数批量导出索引的创建语句

    /* 首先要说的DBMS_METADATA.GET_DDL是个好函数呀!新项目不知道哪个缺心眼建的同构库,只是见了表结构,并没有健非主键外的索引,领导让追加一版,以前只是会用视图拼sql创建,今天有学 ...

  8. DBMS_METADATA.GET_DDL查出不存在的列SYS_C00014_20070116:47:09$

    DBMS_METADATA.GET_DDL查出不存在的列SYS_C00014_20070116:47:09$ 前言 很久很久以前,有多久呢? 有多久了,等等我看下截图的日期(溜︿( ̄︶ ̄)︿). 哦, ...

  9. 为什么dbms_metadata.get_ddl显示不全?

    http://bi.dataguru.cn/thread-335433-1-1.html

随机推荐

  1. jQuery操作DOM知识总结

    jquery操作DOM(节点) 1.创建元素 //$(htmlStr) //htmlStr:html格式的字符串 $("<span>这是一个span元素</span> ...

  2. Kettle通用数据贴源作业设计

    本设计基于以下需求提出 1. 快速接入数据源表(贴源/落地) 2. 无须给单独表开发转换/作业 3. 动态生成数据源连接, 表字段等信息(预先保存在数据仓库中) 本设计所需条件 1. 数据源为关系型数 ...

  3. UBuntu安裝使用PIP

    Windows下安裝python包還是比較方便的,直接在FLD網站下載對應的EXE文件就可以安裝,在linux系統下,使用pip,easy egg 管理工具可以減輕安裝負擔. 原文鏈接:http:// ...

  4. css3动画,点击圆形背景扩展整个页面效果

    上次做项目的时候,要求点击链接,这个链接的圆形背景扩散充满整个页面,今天把这个效果整理一下,是简单的css3的动画特效,粘贴下面的代码看效果 <!DOCTYPE html> <htm ...

  5. jQuery访问json文件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 【转】【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    原文地址:http://www.cnblogs.com/baiboy/p/orc8.html   阅读目录 目录 数据库安装 参考文献 相关文章 Oracle 11G RAC数据库安装(八) 概述:写 ...

  7. 转载:轻量级浏览器特性检测库:feature.js

    feature.js是一个很简单.快速和轻量级的浏览器特性检测库,它没有任何依赖,体积压缩最后只有1KB,它可以自动初始化,在你需要知道某个特性是否可用时,直接引入即可.以下中文为个人理解. /*! ...

  8. tensorflow常见函数

    1.类型转换 tf.string_to_number(string_tensor,out_type=None,name=None)  #字符串转为数字 tf.to_double(x,name='ToD ...

  9. GDI 设备环境句柄(2)

    WM_PAINT 消息的触发 Windows 程序在以下情况会触发WM_PAINT消息: 窗口被移动导致被遮盖部分暴露出来 用户调整窗口的大小(当窗口类的 style 字段被设置为 CS_HREDRA ...

  10. 用基于WebGL的BabylonJS来共享你的3D扫描模型

    转自:http://www.geekfan.net/6578/ 用基于WebGL的BabylonJS来共享你的3D扫描模型 杰克祥子 2014 年 2 月 26 日 0 条评论 标签:3D扫描 , B ...