通过ksh脚本提取DDL后分号丢失

问题描述 投票:0回答:1

运行以下脚本后,输出文件中语句末尾缺少分号。我怎样才能打印出分号?在这种情况下,在AUTO之后和RESIZE 146800640之后应该有一个半结肠

sqlplus -s sys/${sysPwd}@${srcSID} as sysdba<<-EOF>createTS.sql
SET SERVEROUTPUT ON
SET HEADING OFF
SET FEEDBACK OFF
SET LONG 9999
SET LINESIZE 999
SET LONGCHUNKSIZE 350
SET PAGESIZE 10000
SELECT DBMS_METADATA.GET_DDL('TABLESPACE','$srcTablespace') FROM DUAL;
quit;
EOF

Cat结果文件:createTS.sql

CREATE BIGFILE TABLESPACE "TSName" DATAFILE
'/hostname/db/SID/oradata1/tsname.dbf' SIZE 5242880
AUTOEXTEND ON NEXT 5242880 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE
'/hostname/db/SID/oradata1/tsname.dbf' RESIZE 146800640
sql oracle syntax ksh
1个回答
1
投票

您需要将SQLTERMINATOR setting从其默认false值更改为true,您可以在查询之前使用匿名PL / SQL块执行此操作:

BEGIN
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,
    'SQLTERMINATOR', true);
END;
/
SELECT DBMS_METADATA.GET_DDL('TABLESPACE','$srcTablespace') FROM DUAL;

或者您可以使用exec SQL * Plus速记,但整个调用必须在一条线上。

有关the dbms_metadata documentation程序的更多信息,请参阅set_transform_param

© www.soinside.com 2019 - 2024. All rights reserved.