복붙노트

[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. ==============================

    1.그것은 취향의 문제지만, 나는 일관되게 슬래시 사용하는 스크립트를 참조하는 것을 선호 - 모든 작업 "단위"(A DML 문을하는 PL / SQL 객체를 만드는 PL / SQL 익명 블록을 실행하고, 실행)이 될 수있는이 방법을 눈으로 쉽게 골라.

    그것은 취향의 문제지만, 나는 일관되게 슬래시 사용하는 스크립트를 참조하는 것을 선호 - 모든 작업 "단위"(A DML 문을하는 PL / SQL 객체를 만드는 PL / SQL 익명 블록을 실행하고, 실행)이 될 수있는이 방법을 눈으로 쉽게 골라.

    당신은 결국 배포 개미처럼 뭔가로 이동하는 경우 또한, 일관된 문 구분 기호를 가지고 목표의 정의를 단순화합니다.

  2. ==============================

    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. ==============================

    3.나는 사이에 좀 더 사용을 명확히하고 싶었다; 그리고 /

    나는 사이에 좀 더 사용을 명확히하고 싶었다; 그리고 /

    SQLPLUS에서 :

    참고 : 때문에; 성명을 종료 PL / SQL에 사용됩니다; 의미 "현재 문을 종료를 실행하고 SQLPLUS 버퍼에 저장할"우리는 모든 PL / SQL 블록이 버퍼에 완전히되고 싶어하기 때문에, 다음을 실행 SQLPLUS에서 사용할 수 없습니다. 로 끝나야합니다 PL / SQL 블록 :

    END;
    /
    
  4. ==============================

    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. ==============================

    5.나의 이해에서 모든 SQL 문은 DDL, DML, DCL 및 TCL 문을 포함 세미콜론의 끝에서 자동으로 실행됩니다로 슬래시가 필요하지 않습니다.

    나의 이해에서 모든 SQL 문은 DDL, DML, DCL 및 TCL 문을 포함 세미콜론의 끝에서 자동으로 실행됩니다로 슬래시가 필요하지 않습니다.

    프로 시저, 함수, 패키지 및 트리거를 포함하여 다른 PL / SQL 블록, 그들은 여러 줄 프로그램이기 때문에 우리는 각 블록의 끝에서 슬래시를 작성해야하므로, 오라클, 블록을 실행할 때 알 수있는 방법이 필요합니다 들어 오라클은 그것을 실행하자.

  6. ==============================

    6.난 단지 코드의 줄 이상이없는 것을 SQLPLUS 말해, 각 스크립트의 끝에 일단 슬래시를 사용합니다. 스크립트의 중간에, 나는 슬래시를 사용하지 않습니다.

    난 단지 코드의 줄 이상이없는 것을 SQLPLUS 말해, 각 스크립트의 끝에 일단 슬래시를 사용합니다. 스크립트의 중간에, 나는 슬래시를 사용하지 않습니다.

  7. 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