Information in this document applies to any platform.
SYMPTOMS
You have a script that contains a SQL statement with two semicolons (;) at the end. Executing this script in SQL*Plus 8.0.6 shows only the queried records in the spooled output file. However, with SQL*Plus 10.2.x and higher, the spool output contains the actual SQL statement in addition to the queried records.
For Example:
Your script (call it mysql.sql) has the following code:
Select 'x' from dual;
;
Executing this script in SQL*Plus 10.2.x and higher yields output:
SQL> @mysql.sql
'
x
1* Select 'x' from dual
This includes the actual SQL statement, thus corrupting spooled output for further processing.
This was not seen in SQL*Plus 8.0.6 sqlplus. The output from SQL*Plus 8.0.6 yielded:
SQL> @mysql.sql
'
x
CHANGES
This is seen after migrating scripts from SQL*Plus 8.0.6 (usually part of E-Business Suite) to SQL*Plus 10.2.x and higher.
CAUSE
By Default, the semicolon ';' used as "Only character" on a line is interpreted as "show content of buffer". Buffer usually contains last executed SQL statement, thus it shows the SQL statement of the same script.
SOLUTION
To change behavior of ";" from "show buffer", you must set it as a Block terminator.
For Example, you set the following for BLOCKTERMINATOR in your SQL*Plus environment:
set blockterminator ';'
If it is required at script level, the script could be modified as:
set blockterminator ';'
select 'x' from dual;
;
set blockterminator off