SQL * Plus 명령 끝에서 세미콜론의 의미는 무엇입니까?


16

create table, insert into 등과 같은 일부 명령문은 끝에 세미콜론을 사용합니다.

CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn_demo NOT NULL
    ) ;

다른 사람들이 좋아하는 동안

set echo on
connect system/manager

세미콜론 없이도 통과하십시오.

이것에 대한 추론은 무엇입니까? 세미콜론을 어디에 둘 것인지, 어떻게 할 것인지 스스로 결정할 수 있습니까?


6
+1 상황을 더 혼란스럽게 만들려면; 대신 다음 줄에서 /를 사용하면됩니다. 일부 경우에.
bernd_k

답변:


15

로컬 인스턴스에 대한 커밋은 반환시 실행됩니다. 서버에 대한 여러 줄 명령은 세미콜론에서 실행

SQL * Plus 매뉴얼에 자세히 설명 된 특수 명령은 세미콜론을 허용하지 않는 유일한 명령입니다. Wheras SQL 명령;서버에서 구문 분석하기 위해로 끝나야 합니다.


명령 끝의 세미콜론은 Sql Server의 OSQL / SQLCMD에서 실행 된 명령 끝의 GO 문과 같습니다. 명령이 구문 분석되어 실행될 부호입니다.
Marian

7

SQL 문을 SQL * Plus에 입력 할 때, 특히 명령이 여러 행에 걸쳐있는 경우, 명령문이 완료된 시점을 알아야합니다. 따라서 으로 설정할 수 있는 터미널 문자 문자가 필요 합니다 set sqlterminator. 기본적으로이 문자는 세미콜론입니다.

SQL> select *
  2  from
  3  dual;

D
-
X

이제이 터미널 문자를 다음으로 변경하십시오 #.

SQL> set sqlterminator #
SQL> select *
  2  from
  3  dual#

D
-
X

SQL 문이로 종료되었습니다 (종료 실행) #.

당신은 묻습니다 : 왜 set sqlterminator #세미콜론이 뒤 따르지 않았습니까? 이것은 SQL 문이 아니기 때문에 대답하십시오. SQL * Plus 및 해당 동작, 출력, 연결 asf (예 : set echo onconnect system/manager)와 관련된 명령문은 SQL 문이 아니므로 세미콜론없이 입력됩니다.

이것은 무엇과 관련이 /있습니까?

SQL 문을 입력하면 SQL * plus는 버퍼라고하는 것을 채 웁니다. 이 버퍼는 다음 list명령 으로 표시 될 수 있습니다 .

SQL> list
  1  select *
  2  from
  3* dual
SQL>

(참고 : 나는 list 만 입력 했으며 나머지는 반환됩니다)

/지금 현재 버퍼에있는 것을 실행합니다. 시도해 봅시다 :

SQL> /

D
-
X

알 수 있듯이 동일한 쿼리가 실행됩니다.


2

세미콜론은 SQL 파서 의 시퀀스 포인트 인 반면 SQL * Plus 내에서 실행되는 명령은 즉시 실행됩니다. 유사하게, C 프로그램의 세미콜론을 쉘에 입력 된 명령과 비교하십시오.


0

내가 이해하는 방법은 일반적인 SQL 파서가 일반적인 자바 파서와 공통점이 많기 때문에 모든 적절한 장소에서 세미콜론을 원하지만 특정 상황을 제외하고는 필요하지 않습니다. SQL을 작성하라는 지시를 받았을 때 세미콜론은 언어의 일부이며 우리가 무시할 수있는 추가 연산자가 아니라고 들었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.