通过 ksh 脚本提取 DDL 后缺少分号
Semicolon missing after extracting DDL via ksh script
在 运行 以下脚本之后,输出文件中的语句末尾缺少分号。我怎样才能打印出分号?在这种情况下,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
您需要将 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 shorthand 但整个呼叫必须在一条线上。
有关 set_transform_param
过程的更多信息,请参阅 the dbms_metadata
documentation。
在 运行 以下脚本之后,输出文件中的语句末尾缺少分号。我怎样才能打印出分号?在这种情况下,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
您需要将 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 shorthand 但整个呼叫必须在一条线上。
有关 set_transform_param
过程的更多信息,请参阅 the dbms_metadata
documentation。