SQL과 PL / SQL을 구별하는 방법은 무엇입니까?


16

나는 그 질문이 너무 멍청하게 들릴지 모르지만 나는이 부분을 이해하지 못했다.

SQL * Plus는 SQL 및 PL / SQL 모두에서 작동합니다. 일부 코드가 SQL인지 PL / SQL인지 어떻게 알 수 있습니까? 내 코드에 for 루프가 있으면 더 이상 SQL이 아닌가?

PL / SQL은 SQL이 루프, 조건 등을 갖도록 확장 한 것입니다. 그러면 SQL 코드는 기본적으로 PL / SQL 코드입니까? 그렇지 않습니까?

SQL과 PL / SQL 사이에 경계가 있습니까?

이 질문을 유발 한 b / w SQL과 PL / SQL을 차별화하는 두 가지 예 :

이 두 테이블 만들기 문의 차이점은 무엇입니까?

/programming/2267386/oracle-11g-varray-of-objects/2267813#2267813

답변:


12

흥미로운 질문입니다. Oracle 개발에 익숙한 대부분의 사람들은 생각을하지 않을 것이지만,이를 생각해 보면 때로는 SQL과 PL / SQL의 경계를 정의하는 것이 혼란 스러울 수 있습니다.

약어의 정의를 살펴보면 각 기능 영역이 다루는 영역에 대한 아이디어를 얻을 수 있습니다.

SQL-구조적 쿼리 언어

PL / SQL-절차 언어 / 구조적 쿼리 언어

관찰 독자는 SQL이 두 번 나타나는 방법을 알 수 있습니다. 8) SQL이 종종 PL / SQL에 내장되어 있기 때문에-PL / SQL은 독점적 인 4 세대 언어 (4GL) 를 제공하기 위해 만들어진 언어입니다. 데이터베이스 객체와 잘 작동 . 신탁.

Wikipedia는 SQLPL / SQL 에 대해 꽤 좋은 자료를 가지고 있습니다.

혼란스러운 부분은 PL / SQL과 SQL이 약간 겹치는 부분입니다. SQL의 범위에는 데이터 삽입, 쿼리, 업데이트 및 삭제, 소위 DML 또는 데이터 조작 언어 작업이 포함되지만 DDL 또는 데이터 정의 언어 작업 인 만들기, 변경, 이름 바꾸기, 삭제도 포함됩니다. 일부는 혼란 스러울 수 있습니다. PL / SQL을 사용하여 작성된 저장 프로 시저를 작성하는 조작은 실제로 SQL입니다. SQL을 사용하여 PL / SQL 블록을 나타내는 데이터베이스 오브젝트를 작성하십시오.

마찬가지로 PL / SQL에 SQL 코드를 포함 할 수 있습니다. PL / SQL의 FOR 루프는 예를 들어 SQL 쿼리를 기반으로 할 수 있습니다. 당신의 마음을 조금 불면 어? 실제로 내부적으로 SQL을 사용하여 데이터베이스의 레코드에 대한 조치를 수행하는 SQL을 사용하여 프로 시저를 작성합니다.

당신이 나에게 요청하면 멋진 물건.


2
실제로 선이 흐려집니다. SQL 문이있는 PL / SQL 함수를 호출하는 SQL 문이있는 PL / SQL 프로 시저를 작성하기 위해 SQL 문을 작성할 수 있습니다.
Leigh Riffel

1
@ 토끼 구멍을 내려 놓으십시오!
ScottCher

나는 선이 전혀 흐릿하다고 말하지 않을 것입니다. PL / SQL은 SQL의 절차 적 래퍼입니다. 반드시 필요한 것은 아니지만 대부분의 PL / SQL에는 SQL 문이 포함되어 있습니다. 실제 SQL 커서 v$sql등을 추적 할 수 있습니다 .
William Robertson

12

싸서

  • BEGIN ... END
  • DECLARE ... END
  • CREATE OR REPLACE ... END
  • 한 줄짜리 접두사 EXECUTE

그런 다음 PL / SQL입니다. 이것은 후드 아래에서 무엇을 의미합니까? SQL은 쿼리 계획에 "컴파일"되어 실행되며, SELECT다른 경우에 영향을받는 행 수 또는 오류 발생시 결과 세트를 즉시 리턴합니다 . 그러나 PL / SQL이 더 복잡합니다. 여기에서 참조되는 모든 객체가 존재하는지와 필요한 권한이 있는지 확인한 다음 PL / SQL은 거의 네이티브 코드 로 컴파일 되어 전체 속도로 실행됩니다. 종속성이 추적되고 테이블이 변경되면이를 참조하는 PL / SQL이 재 컴파일되어야합니다. 그 이유는 속도입니다. 컴파일 타임에 모든 것이 미리 완료되므로 PL / SQL에서 런타임 검사가 필요하지 않지만 SQL 문은 매번 확인해야합니다 (일부 쿼리 계획도 캐시 됨). 소프트 구문 분석).특권은 여전히 ​​확인해야하며, 소프트 구문 분석에도 관련 비용이 있습니다.

이것은 오라클이하는 것처럼 스토어드 프로 시저의 "킬러 장점"중 하나입니다. 실제로 PL / SQL 저장 프로 시저 또는 트리거를 실행하면 절대 최소량의 계산이 수행되어 결과를 얻습니다. 신뢰할 수없는 Oracle 커널 외부에서 실행되는 애플리케이션 코드는 데이터를 얻기 위해 더 많은 후프를 뛰어 넘어야합니다. OCaml 또는 Haskell과 같이 강력한 형식의 참조 가능한 투명한 고급 언어에 대해서도 같은 주장입니다. 컴파일 타임에 한 번 더 많은 작업을 수행하고 코드가 실행되는 수백만 시간의 이점을 누리십시오.


2
믹스에 추가 CALL은 저장된 프로그램 단위를 실행하는 데 사용되는 SQL 문이며, BEGIN으로 다시 작성됩니다 ... END
Gary

2
EXECUTE와 마찬가지로, 그것은 구문 설탕입니다
Gaius

5

SQL과 PL / SQL 사이에 경계가 있습니까?

SQL은 표준입니다 *.

PL / SQL은 SQL 표준 *에 대한 공급 업체 확장입니다.

* SQL은 문법이 구현되는 방법에 대한 명시 적 문법과 규칙이, 언어입니다 이며 것이 아니라 표준 당 자체가 . 그러나 모든 사람이 동의 할 수있는 언어 사양이 있으므로 프로그램이 SQL로만 작성된 경우 SQL로 작성된 모든 내용을 이식 할 수 있습니다.

그러나 PL / SQL은 공급 업체 확장이므로 다른 공급 업체가 지원하지 않는 언어 부분이 있습니다.


3
PL / SQL은 사실상의 표준이지만 SQL은 중요한 표준이라고 말합니다
Gaius

3
@Gaius와 그 문장만으로도 두 가지를 추측 할 것입니다. 당신은 ORA 개발자이고 TSQL은 지저분하다고 생각합니다 : p
jcolebrand

@jcolebrand 내 첫 DBA 작업은 실제로 Sybase에 있었지만, 요즘에는 주로 Oracle과 협력하고 있습니다. 데이터베이스 중 하나에 T-SQL 또는 PL / SQL을 작성할 수 있다면 매우 기쁠 것입니다. 그러나 언어는 플랫폼을 반영합니다. PL / SQL은 Oracle의 누군가가 마지막으로 DoD에서 근무했기 때문입니다. :-)
Gaius

@Gaius 아, 그렇습니다. 표준에 대한 오래된 주장은 선택해야 할 것이 많기 때문에 훌륭합니다. SQL이 "표준"이고 PL / SQL이 독점적이기 때문에 +1 @jcolebrand임을 나타내는 것이 좋습니다.
ScottCher

@ScottCher ~ 고마워. 나는 표준 도장이 승인 표로 찍히고 번호를 매기 지 않기 때문에 표준이라고 말하는 바보 같은 느낌이 든다. 그러나 잘 정의되고 합의되었습니다. ;)
jcolebrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.