使用dbms_metadata.get_ddl遇到ORA-31603
建了一个外部表,想看看这个表的信息,一查就报错了:
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的更多相关文章
- 【转载】oracle dbms_metadata.get_ddl的使用方法总结
转自:http://www.jb51.net/article/39715.htm dbms_metadata.get_ddl()用于获取对象的ddl,其具体用法如下. 注意:在sqlplus里,为了更 ...
- 利用dbms_metadata.get_ddl查看DDL语句
http://www.cnblogs.com/aocle/archive/2011/10/13/2209790.html 当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metada ...
- Oracle利用dbms_metadata.get_ddl查看DDL语句
当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...
- dbms_metadata.get_ddl的用法(DDL)
dbms_metadata包中的get_ddl函数 --GET_DDL: Return the metadata for a single object as DDL. -- This interfa ...
- Oracle中的dbms_metadata.get_ddl的用法
当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...
- dbms_metadata.get_ddl的用法
--GET_DDL: Return the metadata for a single object as DDL. -- This interface is meant for casual bro ...
- 基于DBMS_METADATA.GET_DDL函数批量导出索引的创建语句
/* 首先要说的DBMS_METADATA.GET_DDL是个好函数呀!新项目不知道哪个缺心眼建的同构库,只是见了表结构,并没有健非主键外的索引,领导让追加一版,以前只是会用视图拼sql创建,今天有学 ...
- DBMS_METADATA.GET_DDL查出不存在的列SYS_C00014_20070116:47:09$
DBMS_METADATA.GET_DDL查出不存在的列SYS_C00014_20070116:47:09$ 前言 很久很久以前,有多久呢? 有多久了,等等我看下截图的日期(溜︿( ̄︶ ̄)︿). 哦, ...
- 为什么dbms_metadata.get_ddl显示不全?
http://bi.dataguru.cn/thread-335433-1-1.html
随机推荐
- Hadoop MapReduce编程 API入门系列之join(二十六)(未完)
不多说,直接上代码. 天气记录数据库 Station ID Timestamp Temperature 气象站数据库 Station ID Station Name 气象站和天气记录合并之后的示意图如 ...
- Java基础之多线程简述
首先,要辨析进程与线程的概念: 进程是程序执行的过程,它持有资源和线程,相对于程序本身而言具有动态性. 线程是系统中最小的执行单元,同一个进程中可能有多个线程,它们共享该进程持有的资源.线程的通信也称 ...
- jQueryDOM操作模块(二)
DOM模块 1.优化框架结构 目标:在实现功能基础上优化代码使得框架更简单易用 1.1 简化存储DOM元素的容器 - elements 目标:使用 this 作为容器 1.1.1 使用 element ...
- 初步学习Axure---整理了一下自己两周的学习成果:动态面板
自己无意间发现了做原型设计的工具--Axure,所以就自学了一点皮毛.最近时间比较充裕,就把自己现学现卖的东西整一整. 作品比较简单,没有技术可言,根据用户和开发需求,利用动态面板和一些点击事件完成了 ...
- swift的计算属性和懒加载
计算属性每次都重新计算. 懒加载只计算一次. 可以借助backing store将计算属性转化为懒加载属性. 计算属性实质上退化为函数调用. 计算属性的标示是get.set.
- codevs 2800 送外卖 floyd + Tsp
简单的状压动归 #include<cstdio> #include<algorithm> using namespace std; const int N=17; const ...
- tomcat 配置 https 几点注意
1.修改server.xml时候把注释的改改就好,不要添加,免得杂乱. 2.安装openssl openssl-devel autoconf libtool apr tomcat-native 才行. ...
- 16种C语言编译警告(Warning)类型的解决方法
当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息.警告信息可能意味着程序中隐含的大错误,也可能确实没有问题.对于警告的正确处理方式应该是:尽可能地消除之.对于编译程序给出的每个警告 ...
- 利用UNIX时间戳来计算ASP的在线时间
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><!DOCTYPE html PUBLIC "-/ ...
- Project Euler 18 Maximum path sum I( DP and 记忆化搜索 )
题意:求从三角形顶端出发到达底部,所能够得到的最大路径和 方法一:记忆化搜索 /************************************************************ ...