[SQL] 언제 오라클 SQL에 슬래시 대 세미콜론을 사용해야합니까?
SQL언제 오라클 SQL에 슬래시 대 세미콜론을 사용해야합니까?
우리는 우리가 우리의 SQL 스크립트를 작성하는 방법에 관해서는 우리 회사에서 어떤 토론이 주를 가지고있다.
배경: 우리의 데이터베이스는 (곧 11로 업그레이드) 오라클 10g이다. 우리의 DBA 팀은 생산에 우리의 스크립트를 배포하기 위해 SQLPLUS를 사용합니다.
이제, 우리는 그것이 세미콜론과 슬래시 (/)를 모두 사용했기 때문에 실패했다고 최근 배포했다. 세미콜론은 각 문장의 끝에이고 슬래시 문 사이였다.
alter table foo.bar drop constraint bar1;
/
alter table foo.can drop constraint can1;
/
일부 트리거 스크립트에서, 일부보기가 만든뿐만 아니라 일부 저장 프로 시저에 나중에 추가되고 있었다. 모두 갖는; 그리고 / 각 문 (특히 고유 데 필요한 삽입에) 오류를 일으키는 두 번 실행하는 원인이되었다.
SQL Developer에서이 두꺼비이 발생하지 않습니다, 발생하지 않습니다. 특정 명령을 실행하면 그들에 /없이 작동하지 않습니다.
PL / SQL에서 당신은 서브 프로그램이있는 경우 (DECLARE, BEGIN, END)는 슬래시를 사용해야하므로 사용 세미콜론, 서브 프로그램의 한 부분으로 간주됩니다.
그래서 제 질문은 이것이다 : 데이터베이스가 오라클 인 경우, SQL 스크립트를 작성하는 적절한 방법은 무엇입니까? 당신은 당신의 DB가 오라클은 항상 /를 사용한다는 것을 알고 있기 때문에?
해결법
-
==============================
1.그것은 취향의 문제지만, 나는 일관되게 슬래시 사용하는 스크립트를 참조하는 것을 선호 - 모든 작업 "단위"(A DML 문을하는 PL / SQL 객체를 만드는 PL / SQL 익명 블록을 실행하고, 실행)이 될 수있는이 방법을 눈으로 쉽게 골라.
그것은 취향의 문제지만, 나는 일관되게 슬래시 사용하는 스크립트를 참조하는 것을 선호 - 모든 작업 "단위"(A DML 문을하는 PL / SQL 객체를 만드는 PL / SQL 익명 블록을 실행하고, 실행)이 될 수있는이 방법을 눈으로 쉽게 골라.
당신은 결국 배포 개미처럼 뭔가로 이동하는 경우 또한, 일관된 문 구분 기호를 가지고 목표의 정의를 단순화합니다.
-
==============================
2.나는이 오래된 스레드 알지만, 난 그냥 우연히 나는이 완전히 설명되지되었습니다 생각합니다.
나는이 오래된 스레드 알지만, 난 그냥 우연히 나는이 완전히 설명되지되었습니다 생각합니다.
A /와 의미 사이의 SQL * 플러스에서 큰 차이가있다; 그들이 다르게 작동하기 때문이다.
; 현재에 불문하고 / 실행하는가 "버퍼"반면에, SQL 문을 종료한다. 당신은을 사용할 때 그래서; 및 / 문은 실제로 두 번 실행됩니다.
당신은 쉽게 문을 실행 한 후 그 / A를 사용하여 볼 수 있습니다 :
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:37:20 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning and OLAP options SQL> drop table foo; Table dropped. SQL> / drop table foo * ERROR at line 1: ORA-00942: table or view does not exist
이 경우 하나에서 실제로 오류를 통지. 그러나이 가정은이 같은 SQL 스크립트입니다 :
drop table foo; /
그리고 이것은 다음이 매우 혼란 될 것입니다 SQL * 플러스 내에서 실행됩니다 :
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:38:05 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning and OLAP options SQL> @drop Table dropped. drop table foo * ERROR at line 1: ORA-00942: table or view does not exist
은 /는 주로 내장 한 문을 실행하기 위해 필요합니다; 같은은 CREATE PROCEDURE 문.
-
==============================
3.나는 사이에 좀 더 사용을 명확히하고 싶었다; 그리고 /
나는 사이에 좀 더 사용을 명확히하고 싶었다; 그리고 /
SQLPLUS에서 :
참고 : 때문에; 성명을 종료 PL / SQL에 사용됩니다; 의미 "현재 문을 종료를 실행하고 SQLPLUS 버퍼에 저장할"우리는 모든 PL / SQL 블록이 버퍼에 완전히되고 싶어하기 때문에, 다음을 실행 SQLPLUS에서 사용할 수 없습니다. 로 끝나야합니다 PL / SQL 블록 :
END; /
-
==============================
4.거의 모든 Oracle 배포는 * SQL을 통해 수행되는 플러스 (이상한 작은 명령 줄 도구 당신의 DBA의 사용). 그리고 SQL에서 * 플러스 혼자 슬래시는 기본적으로 "난 그냥 실행 지난 SQL 또는 PL / SQL 명령을 다시 실행"를 의미한다.
거의 모든 Oracle 배포는 * SQL을 통해 수행되는 플러스 (이상한 작은 명령 줄 도구 당신의 DBA의 사용). 그리고 SQL에서 * 플러스 혼자 슬래시는 기본적으로 "난 그냥 실행 지난 SQL 또는 PL / SQL 명령을 다시 실행"를 의미한다.
보다
엄지 손가락의 규칙 .. END 또는 CREATE OR REPLACE 사용할 수있는 BEGIN 않는 것들로 슬래시를 사용하는 것입니다.
필요 고유 한 사용 될 것을 삽입을 위해
INSERT INTO my_table () SELECT <values to be inserted> FROM dual WHERE NOT EXISTS (SELECT FROM my_table WHERE <identify data that you are trying to insert>)
-
==============================
5.나의 이해에서 모든 SQL 문은 DDL, DML, DCL 및 TCL 문을 포함 세미콜론의 끝에서 자동으로 실행됩니다로 슬래시가 필요하지 않습니다.
나의 이해에서 모든 SQL 문은 DDL, DML, DCL 및 TCL 문을 포함 세미콜론의 끝에서 자동으로 실행됩니다로 슬래시가 필요하지 않습니다.
프로 시저, 함수, 패키지 및 트리거를 포함하여 다른 PL / SQL 블록, 그들은 여러 줄 프로그램이기 때문에 우리는 각 블록의 끝에서 슬래시를 작성해야하므로, 오라클, 블록을 실행할 때 알 수있는 방법이 필요합니다 들어 오라클은 그것을 실행하자.
-
==============================
6.난 단지 코드의 줄 이상이없는 것을 SQLPLUS 말해, 각 스크립트의 끝에 일단 슬래시를 사용합니다. 스크립트의 중간에, 나는 슬래시를 사용하지 않습니다.
난 단지 코드의 줄 이상이없는 것을 SQLPLUS 말해, 각 스크립트의 끝에 일단 슬래시를 사용합니다. 스크립트의 중간에, 나는 슬래시를 사용하지 않습니다.
from https://stackoverflow.com/questions/1079949/when-do-i-need-to-use-a-semicolon-vs-a-slash-in-oracle-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL은 가입 : 사용 ON 또는 WHERE 사이에 차이가? (0) | 2020.03.08 |
---|---|
[SQL] SQLSERVER에서 ListAGG (0) | 2020.03.08 |
[SQL] SQL은 TABLEA FROM [COLUMNA 제외] SELECT *를 이용하여 열을 제외? (0) | 2020.03.08 |
[SQL] SQL 서버에서 날짜의 제거 시간 부분에 가장 좋은 방법 (0) | 2020.03.08 |
[SQL] ID 일치를 기반으로 한 테이블에서 다른 SQL 업데이트 (0) | 2020.03.08 |