Oracle SQL에서 세미콜론과 슬래시를 사용해야 하는 경우
이번 주 저희 회사에서 SQL 스크립트를 어떻게 작성해야 하는지에 대해 몇 가지 논의를 했습니다.
배경:당사의 데이터베이스는 Oracle 10g입니다(11개로 곧 업그레이드).DBA 팀은 SQLPlus를 사용하여 스크립트를 실제 가동 환경에 도입하고 있습니다.
및 슬래시Semicolon 및 Slash)를 모두 했기 때문에 /
은 각 문 끝에 는 문 세미콜론은 각 문의 끝에 있고 슬래시는 문장 사이에 있습니다.
alter table foo.bar drop constraint bar1;
/
alter table foo.can drop constraint can1;
/
스크립트에서 나중에 몇 가지 트리거가 추가되었고, 몇 가지 뷰와 저장 프로시저가 생성되었습니다. 다 있다;
및/
각 문이 두 번 실행되어 오류가 발생했습니다(특히 고유해야 하는 삽입물에 대해).
SQL Developer: SQL Developer: SQL Developer: SQL Developer: SQL Developer: SQL Developer.TOD를 사용하다는 명령어가 하지 않습니다./
그 안에.
PL/SQL에서는 서브프로그램(DECARE, BEGIN, END)이 있는 경우 사용되는 세미콜론은 서브프로그램의 일부로 간주되므로 슬래시를 사용해야 합니다.
제 데이터베이스가 Oracle인 경우 SQL 스크립트를 작성하는 적절한 방법은 무엇입니까? 있기 ./
이게 오래된 줄거리인 건 알지만, 우연히 발견해서 아직 완전히 설명되지 않은 것 같아요.
에는 큰 차이가 ./
a. a. a.;
서로 다르게 작용하기 때문입니다.
;
문은 문은 종료됩니다./
이 말은 '아주'라는 뜻이죠. '어울림'을 할 때;
및 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
이 경우는, 에러를 실제로 알 수 있습니다.
이런요.
drop table foo;
/
이 작업은 SQL*Plus 내에서 수행되므로 매우 혼란스러울 수 있습니다.
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
,CREATE FUNCTION
,CREATE PACKAGE
및 의 「」의 .BEGIN...END
★★★★★★ 。
두 단어 를 좀 더 요.;
및/
SQLPLUS의 경우:
;
는 " 문을한 후 버퍼에 "을 의미합니다<newline>
, INSERT, ...) 문D.M.L.(SELECT, UPDATE, INSERT, ...) 후에 D.D.M.L.로 합니다. Views)(Creating Tables and Views)을 하지 않음) "(No)";
을 의미합니다는 명령문을 버퍼에 저장하지만 실행은 하지 않는 것을 의미합니다./
「」가 있는 )<newline>
는 "., PL를 의미합니다RUN
★★★★★★★★★★★★★★★★★」R
SQL/SQL Sqlsplus를 사용합니다.SQL sql sql sql sql 。/
., PL 입력 "후 버퍼 D.M.L., D.D.L.에 "을 의미합니다
주의: 이유;
가 PL/SQL 의 됩니다.;
PL/SQL 블록 전체를 버퍼에 완전히 저장하고 싶기 때문에 SQLPLUS에서 "현재 문을 종료하고 실행한 후 SQLPLUS 버퍼에 저장"을 의미하도록 사용할 수 없습니다. PL/SQL 블록은 다음과 같이 끝나야 합니다.
END;
/
선호도에 따라 다르지만 슬래시를 일관되게 사용하는 스크립트를 보는 것이 좋습니다.이렇게 하면 작업(PL/SQL 객체 작성, PL/SQL 익명 블록 실행, DML 문 실행)의 모든 "유닛"을 눈으로 보다 쉽게 선택할 수 있습니다.
또, 최종적으로 전개를 위해서 Ant와 같은 것으로 이행하는 경우, 일관된 문 구분 기호가 설정되도록 타겟의 정의가 심플해집니다.
거의 모든 Oracle 도입은 SQL*Plus(DBA가 사용하는 이상한 명령줄 툴)를 통해 이루어집니다.SQL*Plus에서 lone slash는 기본적으로 "방금 실행한 마지막 SQL 또는 PL/SQL 명령어를 다시 실행"을 의미합니다.
봐
의 법칙은 입니다.BEGIN .. END
'서'를 사용할 수 .CREATE OR REPLACE
.
고유하게 사용해야 하는 삽입물용
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>)
제가 알기로는 모든 SQL 문은 DDL, DML, DCL 및 TCL 문을 포함하여 세미콜론의 끝에서 자동으로 실행되므로 슬래시가 필요하지 않습니다.
Procedures, Functions, Packages, Trigger 등 다른 PL/SQL 블록의 경우 여러 줄 프로그램이기 때문에 Oracle은 블록을 실행할 시기를 알 수 있는 방법이 필요하므로 각 블록의 끝에 슬래시를 작성하여 Oracle이 실행할 수 있도록 해야 합니다.
sqlplus에 코드 행이 더 이상 없음을 알리기 위해 각 스크립트의 마지막에 슬래시를 한 번만 사용합니다.대본 중간에는 슬래시를 사용하지 않습니다.
sql 스크립트 파일에서 세미콜론을 사용하여 클라이언트 소프트웨어(SQL*Plus, SQL Developer)에 실행할 단일 문을 지정하는 SQL 문을 구분합니다.
slash in sql 스크립트파일을 사용하여 클라이언트소프트웨어(SQL*Plus, SQL Developer)에 실행하는 단일 pl/sql 블록을 구분합니다.
버퍼링된 문을 실행하는 경우 SQL*Plus 명령줄에서 slash를 사용합니다(예, 세미콜론 또는 slash가 없는 pl/sql 블록이 단일 sql 문임).
"end;"로 끝나는 문 뒤에 슬래시를 사용하고, 그렇지 않으면 사용하지 마십시오.
Oracle에서 개체 유형을 생성하기 전에 아직 정의되지 않은 다른 유형을 참조하기 위해 더미 유형이 생성됩니다.슬래시는 가장 최근에 유형 정의 변경을 실행하거나 SQL 버퍼의 기존 유형을 대체된 유형으로 바꾸는 데 사용됩니다.
참고 자료: https://docs.oracle.com/cd/E18283_01/server.112/e16604/ch_twelve004.htm
언급URL : https://stackoverflow.com/questions/1079949/when-do-i-need-to-use-a-semicolon-vs-a-slash-in-oracle-sql
'programing' 카테고리의 다른 글
Postgre의 JSON 데이터 유형 크기 제한SQL (0) | 2023.03.28 |
---|---|
URL 없이 상태 간에 데이터를 전달하는 AngularJS UI 라우터 (0) | 2023.03.28 |
Eclipse 프로젝트로 JSON 가져오기 (0) | 2023.03.28 |
Oracle에서 테이블 열 정렬 (0) | 2023.03.28 |
정의되지 않은 함수 curl_version 호출 (0) | 2023.03.28 |