คุณสามารถทำสิ่งนี้ได้โดยใช้ login.sql login.sql ดำเนินการระหว่าง - น่าแปลกใจ - เข้าสู่ระบบและโหลดจาก SQLPATH หรือไดเรกทอรีปัจจุบันของคุณ สำหรับตัวอย่างที่คุณให้คุณเลือกกรณีที่แย่ที่สุด
ปัญหาคือ sqlterminator สิ่งที่คุณใส่เข้าไปที่นั่นเครื่องหมายทับหน้าจะถูกรักษาไว้เป็น sqlterminator ฟรี ถัดจากนั้น sqlplus จะสแกนหา sqlterminator ก่อนและทำสิ่งนี้ก่อนที่จะสแกนไปยังตัวสิ้นสุดของสตริง ข้อบกพร่องถ้าคุณถามฉัน สแลชไปข้างหน้าสามารถใช้ในสตริงตราบใดที่มันไม่ได้อยู่คนเดียวในบรรทัดแยก ทันทีที่ sqlplus ค้นหาอักขระที่ระบุเป็น sqlterminator มันจะไม่สนใจทุกสิ่งและหยุดอ่าน
สแลชไปข้างหน้าสามารถจัดการได้ตราบใดที่มันไม่ได้อยู่คนเดียวในบรรทัด
login.sql ประกอบด้วย:
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 ประกอบด้วย:
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/
';
เรียกใช้สคริปต์:
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.
ไม่จำเป็นต้องเล่นซอกับบล็อกเริ่มต้น / สิ้นสุด ไม่สามารถจัดการ sqlterminator ภายในคำสั่งไม่ว่ามันจะอยู่ที่ไหนในสตริงหรือไม่ไม่สามารถจัดการกับเส้นด้วยสแลชไปข้างหน้าคนเดียวในบรรทัดในสตริง