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를 처리 할 수 없습니다. 문자열의 줄에서 슬래시가있는 줄은 단독으로 처리 할 수 없습니다.