【问题标题】:Get complete ddl for index in oracle在 oracle 中为索引获取完整的 ddl
【发布时间】:2017-02-10 06:15:48
【问题描述】:

我正在使用 oracle 11g/12c。我想在我的数据库中获取索引的 ddl。为此,我使用了查询 -

SELECT DBMS_METADATA.GET_DDL('INDEX','SYS_IL0000091971C00001$$','CCEEXPERTS') FROM dual

这里“SYS_IL0000091971C00001$$”是我的索引名称,“CCEEXPERTS”是我的所有者名称。

从这里我得到了 ddl -

 CREATE UNIQUE INDEX "CCEEXPERTS"."SYS_IL0000091971C00001$$" ON "CCEEXPERTS"."DATABLOB" (

而我实际的 ddl 是 -

CREATE UNIQUE INDEX "CCEEXPERTS"."SYS_IL0000091971C00001$$" ON "CCEEXPERTS"."DATABLOB" (
  PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" 
  PARALLEL (DEGREE 0 INSTANCES 0) ;

在 "CCEEXPERTS"."DATABLOB" ( 之后的实际 ddl 中,下一行字符和它们的 ddl 被截断。

如何获得完整的 ddl?请帮帮我...

提前致谢。

【问题讨论】:

  • 这和tsql有什么关系?
  • 怀疑换行后看不到东西。这是你的问题。你是如何运行查询的?

标签: oracle sqlplus dbms-metadata


【解决方案1】:

在 SQLplus 中,在运行过程之前设置这些。

set long 100000
set longchunksize 100000

【讨论】:

  • 我认为应该是 longchunksize
【解决方案2】:

Oracle 有一个DBMS_METADATA 包来检索和自定义返回的 DDL。所有索引SQL的默认设置:

select DBMS_METADATA.GET_DDL('INDEX', index_name) 
from all_indexes 
where owner in (USER, 'USER_OTHER_THAN_LOGGED_IN_USER');

一个 pl/sql 块示例:

set serveroutput on 
DECLARE
   V_DDL CLOB;
BEGIN
   DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
   DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', true);
   dbms_metadata.set_transform_param(dbms_metadata.session_transform,'TABLESPACE',false);
   V_DDL := DBMS_METADATA.GET_DDL('VIEW', 'A_VIEW_NAME');
   DBMS_OUTPUT.PUT_LINE(V_DDL);
END;

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2011-10-05
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多