Anda dapat melakukan sebagian besar dari ini dengan menggunakan login.sql. login.sql dijalankan selama - mengejutkan - login dan diambil dari SQLPATH Anda atau direktori saat ini. Untuk contoh yang Anda berikan, Anda benar-benar memilih kasus terburuk.
Masalahnya adalah sqlterminator. Apa pun yang Anda masukkan ke sana, garis miring akan dipertahankan sebagai sqlterminator gratis. Di sebelahnya, sqlplus memindai pertama untuk sqlterminator dan melakukan ini sebelum memindai ke terminator string. Bug jika Anda bertanya kepada saya. Garis miring ke depan dapat digunakan dalam string selama itu tidak sendirian pada garis yang terpisah. Segera setelah sqlplus menemukan karakter yang ditentukan sebagai sqlterminator, ia mengabaikan semua yang lain dan berhenti membaca.
Garis miring ke depan dapat ditangani, asalkan tidak sendirian di garis.
login.sql berisi:
prompt run login.sql
show sqlterminator
show sqlblanklines
set sqlblanklines on
set sqlterminator ';'
show sqlterminator
show sqlblanklines
prompt ready login.sql
set echo on
leigh.sql berisi:
INSERT INTO t1 VALUES ('fail bc semicolon
a;a
/
');
INSERT INTO t1 VALUES ('fail bc solo /
aa
/
');
INSERT INTO t1 VALUES ('ok / not solo
aa
/a
');
DELETE FROM t1 WHERE a = 'c
a/
';
jalankan skrip:
sqlplus leigh/leigh@orcl @leigh
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Aug 9 22:36:20 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
run login.sql
sqlterminator ";" (hex 3b)
sqlblanklines OFF
sqlterminator ";" (hex 3b)
sqlblanklines ON
ready login.sql
SQL> INSERT INTO t1 VALUES ('fail bc semicolon
2 a;a
3 /
ERROR:
ORA-01756: quoted string not properly terminated
SQL> ');
SP2-0042: unknown command "')" - rest of line ignored.
SQL>
SQL> INSERT INTO t1 VALUES ('fail bc solo /
2
3
4 aa
5 /
ERROR:
ORA-01756: quoted string not properly terminated
SQL> ');
SP2-0042: unknown command "')" - rest of line ignored.
SQL>
SQL> INSERT INTO t1 VALUES ('ok / not solo
2
3
4 aa
5 /a
6 ');
1 row created.
SQL>
SQL> DELETE FROM t1 WHERE a = 'c
2
3
4 a/
5 ';
0 rows deleted.
Tidak perlu bermain-main dengan blok awal / akhir. Tidak dapat menangani sqlterminator di dalam perintah, di mana pun ia berada, dalam sebuah string atau tidak, tidak dapat menangani garis dengan garis miring sendiri pada garis dalam string.