Reputation: 361
I'm trying to generate all DDLs for objects in a Database using the SPOOL command in SQLPLUS:
SET trimspool ON
SET wrap off
SET heading off
SET linesize 300
SET echo off
SET pages 999
SET long 90000
Col object_type format a10000
Col object_name format a10000
Col owner format a10000
spool export.out
SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner)
FROM all_OBJECTS
WHERE OWNER = 'DMALM'
and object_type not like '%PARTITION'
and object_type not like '%BODY'
and object_type not like '%LOB';
spool off
quit
But the output file I get is cut at col #80. How can I prevent the output file from being wrapped?
Upvotes: 6
Views: 13012
Reputation: 306
The following works. You can download all SPs under one schema. You can also download one SP at a time.
CREATE or replace DIRECTORY DIR_DDL AS '/dir_name';
grant read, write on directory DIR_DDL to user_name;
-- ====================================================
-- NOTE: Need to use the object owner user, not SYS.
-- ====================================================
DECLARE
v_ddl_clob CLOB;
BEGIN
FOR c IN ( SELECT object_name, object_type
FROM dba_objects
WHERE object_type IN ('PROCEDURE')
AND OWNER = 'SYS'
AND object_name = 'SP_NAME' )
LOOP
-- You want "/" in a new line. Otherwise, it will not work
v_ddl_clob := dbms_metadata.get_ddl(c.object_type, c.object_name) ||'
/';
-- write to SQL directory :
dbms_xslprocessor.clob2file(v_ddl_clob, 'DIR_DDL', c.object_name||'.sql');
END LOOP;
END;
/
Upvotes: -1
Reputation: 191570
You need to also do:
SET longchunksize 90000
The default width of datatype columns is the width of the column in the database. The column width of a
LONG
,BLOB
,BFILE
,CLOB
,NCLOB
orXMLType
defaults to the value ofSET LONGCHUNKSIZE
orSET LONG
, whichever is the smaller.
You're setting LONG
already, but LONGCHUNKSIZE
is still at its default value of 80, so you need to increase that to match. You can see all your current settings with show all
.
This preserves the line breaks and indentation applied by default.
Upvotes: 7
Reputation: 1496
Sounds like you may want to try:
set longchunksize 100
or equivalent. Experiment with the number see if it helps.
Source Oracle Docs
Upvotes: 1
Reputation: 1102
How about using word_wrapped?
SET trimspool ON
SET heading off
SET linesize 300
SET echo off
SET pages 999
SET long 90000
set termout off
column txt format a121 word_wrapped
Col object_type format a10000
Col object_name format a10000
Col owner format a10000
spool export.out
SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner)txt
FROM all_OBJECTS
WHERE OWNER = 'DMALM'
and object_type not like '%PARTITION'
and object_type not like '%BODY'
and object_type not like '%LOB';
spool off
quit
Upvotes: 1