이 장에서는 윈 토토의 구문을 설명합니다. 그것은 형성된다 다음 장을 이해하기위한 재단 윈 토토 명령이 정의 및 데이터 수정.
우리는 또한 이미 윈 토토에 익숙한 사용자에게 읽을 권고합니다. 이 장은 여러 규칙이 있기 때문에 신중하게 윈 토토 데이터베이스 중에서 일관되지 않은 개념 또는에 따라Postgre윈 토토.
윈 토토 입력은 시퀀스로 구성됩니다.명령. 명령은 시퀀스로 구성됩니다 의토큰, 세미콜론에 의해 종료되었습니다 (";"). 입력 스트림의 끝 또한 명령을 종료합니다. 어떤 토큰이 유효한 지에 따라 다릅니다 특정 명령의 구문.
토큰이 될 수 있습니다키워드, an식별자, a인용 식별자, a리터럴(또는 상수) 또는 특수 캐릭터 상징. 토큰은 일반적으로 공백으로 분리됩니다 (공간, 탭, Newline)이지만 모호성이없는 경우 ( 특수 캐릭터가 인접한 경우에만 해당됩니다. 다른 토큰 유형에).
추가로,댓글윈 토토 입력. 그들은 토큰이 아니며 효과적으로 동등합니다 공백에.
예를 들어, 다음은 (구문 적으로) 유효한 윈 토토입니다 입력:
선택 *에서 my_table; my_table set a = 5 업데이트; my_table 값에 삽입 (3, 'hi there');
이것은 한 줄에 하나씩 세 가지 명령의 순서입니다. 이것은 필요하지 않습니다. 둘 이상의 명령이 줄에있을 수 있습니다. 그리고 명령은 유용하게 선을 가로 질러 분할 될 수 있습니다).
윈 토토 구문은 어떤 토큰에 대해서는 그다지 일관되지 않습니다. 명령을 식별하고 피연산자 또는 매개 변수입니다. 그만큼 처음 몇 개의 토큰은 일반적으로 명령 이름이므로 위의 예를 들어 우리는 일반적으로에 대해 말할 것입니다."선택", an"업데이트"및 an"삽입"명령. 그러나 예를 들어업데이트명령은 항상 필요합니다SET토큰이 특정에 나타납니다 위치 및이 특별한 변형의삽입a도 필요합니다.값완료되기 위해. 정확한 구문 각 명령에 대한 규칙은에 설명되어 있습니다.Postgre윈 토토 7.3.21 참조 설명서.
예를 들어select, 업데이트또는값위의 예는의 예입니다.키 단어, 즉, 고정 된 의미가있는 단어 윈 토토 언어. 토큰my_tableanda의 예입니다식별자. 그들은 테이블의 이름을 식별하고 명령에 따라 열 또는 기타 데이터베이스 개체 그들은 사용됩니다. 따라서 때로는 단순히라고 불립니다."이름". 핵심 단어 및 식별자 동일한 어휘 구조를 가지고 있습니다. 즉, 알 수 없습니다. 토큰이 식별자인지 또는 핵심 단어가 없는지 언어를 알고 있습니다. 핵심 단어의 전체 목록이 될 수 있습니다 에서 발견503 스포츠 토토 결과 페치 실패.
윈 토토 식별자 및 키워드는 편지로 시작해야합니다. (a-Z, 그러나 또한 명성적인 자국과 비 라틴 문자가있는 문자) 또는 밑줄 (_). 후속 식별자 또는 키워드의 문자는 문자 일 수 있습니다. 숫자 (0-916516_16660
시스템은 이상을 사용하지 않습니다.지명-1 식별자의 문자; 더 긴 이름은 명령으로 작성할 수 있지만 잘린. 기본적으로지명IS 64 따라서 최대 식별자 길이는 63입니다 (그러나 당시에는 Postgre윈 토토이 구축되었습니다.지명 된 ATALENcan 변경src/include/postgres_ext.h).
my_table set a = 5; 업데이트
동등하게 칭찬 할 수 있습니다
my_table set a = 5; 업데이트
자주 사용되는 협약은 상단에 핵심 단어를 쓰는 것입니다. 소문자의 사례 및 이름 (예 :
my_table set a = 5; 업데이트
두 번째 종류가 있습니다 식별자 :구분 식별자또는인용 식별자. 그것은 임의의 캐릭터 순서를 둘러싸고 형성됩니다. 이중 인용문 ("). 구분 식별자는 항상 식별자이며 결코 키 단어가 아닙니다. 그래서"선택"a를 참조하는 데 사용될 수 있습니다 열 또는 테이블이라는 열"선택", 인용되지 않은 반면select키 단어로 취해서 구문 분석 오류가 발생합니다. 테이블 또는 열 이름이 예상되는 곳에서 사용하면 그만큼 예제는 다음과 같은 인용 된 식별자로 작성할 수 있습니다.
업데이트 "my_table"set "a"= 5;
견적 된 식별자는 a 이외의 다른 문자를 포함 할 수 있습니다 이중 인용 자체. 이중 인용문을 포함하려면 두 가지를 쓰십시오 이중 인용문. 이를 통해 테이블 또는 열 이름을 구성 할 수 있습니다 그렇지 않으면 불가능할 것입니다. 공백 또는 앰퍼 샌드. 여전히 길이 제한 적용.
식별자 인용은 또한 대소 문자에 민감하게 만듭니다. 인용되지 않은 이름은 항상 소문자로 접 힙니다. 을 위한 예, 식별자foo, fooand"foo"Postgre윈 토토그러나"foo"and"foo"are 이 세 가지와 서로 다릅니다.[1]
세 가지 종류의암시 적으로 유형 된 상수inPostgre윈 토토: 문자열, 비트 문자열 및 숫자. 상수는 명시 적 유형으로 지정할 수도 있습니다. 보다 정확한 표현 등을 가능하게 할 수 있습니다 시스템에 의한 효율적인 처리. 암시 적 상수는입니다 아래 설명; 명시 적 상수에 대해 설명합니다 나중에.
문자열 상수 윈 토토은 임의의 문자 순서입니다 단일 따옴표 (" '"), 예 :'이것은 문자열입니다'. 윈 토토은 허용됩니다 두 개를 입력하여 문자열에 내장 할 단일 따옴표 인접한 단일 따옴표 (예 :'Dianne' 's Horse'). 안에Postgre윈 토토단일 따옴표 5 월 또는 Backslash (로 탈출해야합니다."\", 예 :'Dianne \'s 말').
C 스타일의 백 슬래시 탈출도 가능합니다 :\ b백 스페이스,\ f양식 피드입니다.\ n는 Newline,입니다.\ r캐리지 리턴입니다.\ t그리고\xxx, 여기xxx는 8 월 번호입니다 해당 ASCII 코드를 가진 문자. 다른 것 백 슬래시를 따르는 캐릭터는 문자 그대로 취합니다. 따라서, 문자열 상수에 백 슬래시를 포함 시키려면 2 형 백 슬래시.
코드 0이있는 문자는 문자열에있을 수 없습니다. 끊임없는.
두 개의 문자열 상수에 의해서만 분리됩니다 공백적어도 One Newline는 연결되고 효과적으로 처리됩니다 마치 문자열이 하나의 상수로 작성된 것처럼. 을 위한 예:
'foo'선택 '술집';
'foobar'를 선택하십시오;
그러나
'foo' 'bar'; 선택
유효한 구문이 아닙니다. (이 약간 기괴한 행동입니다 지정윈 토토;Postgre윈 토토표준.)
비트 스트링 상수는 문자열 상수처럼 보입니다B(위 또는 소문자) 오프닝 견적 직전 (개입 없음 Whitespace), 예 :B'1001 '. 그만큼 비트 스트링 상수 내에서 허용되는 문자 만0and1.
또는 비트 스트링 상수를 지정할 수 있습니다 선두를 사용하는 16 진전 표기법x(위 또는 소문자), 예 :x'1ff '. 이 표기법은 a와 같습니다 각각 4 개의 이진 숫자로 비트 스트링 상수 16 진수 숫자.
비트 스트링 상수의 두 형태가 계속 될 수 있습니다 일반 문자열과 같은 방식으로 라인을 가로 질러 상수.
숫자 상수는이 일반적인 것으로 허용됩니다 양식 :
Digits Digits. [Digits] [E [+-]Digits] [Digits].Digits[E [+-]Digits]DigitsE [+-]Digits
여기서숫자하나 또는 더 많은 소수점 숫자 (0-9). 적어도 하나의 숫자가 있어야합니다 소수점 전후에 사용되는 경우. ~에 최소 1 자리는 지수 마커를 따라야합니다 (e), 하나가있는 경우. 아무것도 없을 수 있습니다 상수에 내장 된 공백 또는 기타 문자. 메모 선행 플러스 또는 마이너스 부호가 실제로 상수의 일부로 간주됩니다. 적용되는 연산자입니다 상수에.
유효한 숫자 상수의 일부 예입니다.
42
3.5
4.
.001
5e2
1.925E-3
소수점이없는 숫자 상수 또한 지수는 처음에 유형으로 추정됩니다정수값이 유형에 맞는 경우Integer(32 비트); 그렇지 않으면 그것은 추정됩니다 형성bigint값이 맞는 경우 유형bigint(64 비트); 그렇지 않으면 유형으로 촬영됩니다숫자. 소수점 및/또는 지수를 포함하는 상수 항상 처음에는 유형으로 추정숫자.
숫자 상수의 초기에 할당 된 데이터 유형 유형 해상도의 출발점 일뿐입니다 알고리즘. 대부분의 경우 상수가 될 것입니다 가장 적절한 유형으로 자동 강요됩니다 상황에 따라. 필요한 경우 강제 a 특정 데이터 유형으로 해석 할 숫자 값 캐스팅. 예를 들어, 숫자 값을 강제 할 수 있습니다 유형으로 취급Real(float4) 쓰기
Real '1.23' - 문자열 스타일 1.23 :: Real -Postgresql (역사적) 스타일
a 상수임의의유형을 입력 할 수 있습니다 다음 표기법 중 하나 사용 :
타입'String' 'String'::Type캐스트 ( 'String' 처럼타입)
문자열의 텍스트는 입력 변환으로 전달됩니다 라는 유형의 루틴타입. 결과는 상수입니다 표시된 유형. 명시 적 유형 캐스트는 IF를 생략 할 수 있습니다 상수 유형에 대한 모호성은 없습니다. (예를 들어, 논쟁으로 전달 될 때 비 중점 기능),이 경우 자동으로입니다 강제.
함수와 같은 구문 :
typename( 'String' )
그러나 모든 유형 이름이 이러한 방식으로 사용될 수는 없습니다. 보다섹션 1.2.6자세한 내용.
the::, cast ()및 함수 콜 구문도 할 수 있습니다 임의의 런타임 유형 변환을 지정하는 데 사용됩니다 표현,섹션 1.2.6. 하지만 양식타입'String' 지정하는 데만 사용될 수 있습니다 문자 그대로 상수의 유형. 또 다른 제한타입'String' 작동하지 않는 것입니다 배열 유형; 사용::또는cast ()배열의 유형을 지정합니다 끊임없는.
배열 상수의 일반적인 형식은입니다 수행원:
'val1 delim val2 delim... '
여기서delim입니다 그 유형의 구분자 문자, 그 유형에 기록 된대로pg_type입력. (모든 내장 유형, 이것은 쉼표 문자입니다",".) 각val는 상수입니다 배열 요소 유형 또는 서브 어레이. An의 예 배열 상수는
'1,2,3, 4,5,6, 7,8,9'
이 상수는 2 차원 3 x 3 배열입니다 정수의 세 가지 하위 배열로 구성됩니다.
개별 배열 요소는 그 사이에 배치 할 수 있습니다 이중 인용 점수 (") 피하기 공백과 관련된 모호성 문제. 없이 견적 마크, 배열 값 파서는 선두를 건너 뛸 것입니다 공백.
(어레이 상수는 실제로 특별한 경우에 지나지 않습니다. 이전 섹션에서 논의 된 일반 유형 상수. 상수는 처음에 끈으로 취급되어 배열 입력 변환 루틴. 명시 적 유형 사양이 필요할 수 있습니다.)
연산자는 최대의 시퀀스입니다.paminatalen-1 (기본적으로 63) 문자 다음 목록 :
+-*/< = ~! @#%^& | `? $
거기 그러나 운영자 이름에 대한 몇 가지 제한 사항입니다.$(달러)는 a 단일 문자 연산자이지만 a의 일부일 수 있습니다 다중 문자 운영자 이름.
--및/*연산자의 어느 곳에도 나타날 수 없습니다 이름, 그들은 논평.
다중 문자 연산자 이름은 끝날 수 없습니다+또는-, 이름 에도이 중 하나 이상이 포함되지 않는 한 캐릭터 :
~! @#%^& | `? $
예,@-허용됩니다 운영자 이름이지만*-그렇지 않습니다. 이 제한은 허용Postgre윈 토토윈 토토 준수를 구문 분석합니다 토큰 사이의 공간이 필요없는 쿼리.비 윈 토토 표준 운영자 이름으로 작업 할 때, 당신 일반적으로 인접한 연산자와 공간을 분리해야합니다 모호성을 피하기 위해. 예를 들어, 왼쪽을 정의한 경우 단술 조작자 명명@, 당신은 할 수 없습니다 쓰다x*@y; 당신은 작성해야합니다x* @yPostgre윈 토토두 연산자로 읽습니다 이름이 아닙니다.
영숫자가 아닌 일부 캐릭터에는 특별한 것이 있습니다 연산자와는 다른 의미입니다. 에 대한 세부 사항 사용법은 각각의 위치에서 찾을 수 있습니다. 구문 요소가 설명되어 있습니다. 이 섹션은 만 존재합니다 존재를 조언하고 이것의 목적을 요약하십시오 캐릭터.
달러 표시 ($) 숫자는 위치 매개 변수를 나타내는 데 사용됩니다 함수 정의의 본문. 다른 맥락에서 달러 표시는 운영자 이름의 일부일 수 있습니다.
괄호 (()) 그룹 표현과 집행에 대한 일반적인 의미 상위. 어떤 경우에는 괄호가 필요합니다 특정 윈 토토 명령의 고정 구문의 일부.
브래킷 ([])는 익숙합니다 배열의 요소를 선택하십시오. 보다섹션 5.12자세한 내용은 배열.
쉼표 (,)는 일부에서 사용됩니다 a의 요소를 분리하기위한 구문 구성 목록.
세미콜론 (;) 종료됩니다 윈 토토 명령. a 안에있는 곳에는 나타날 수 없습니다 문자열 상수 또는 인용을 제외하고 명령 식별자.
콜론 (:)는 익숙합니다 선택하다"슬라이스"배열에서. (보다PostgreSQL : 문서 : 7.3 : 사설 토토.) 윈 토토 방언 (예 : 임베디드 윈 토토), 결장은 접두사 변수 이름.
별표 (*)가 있습니다
에서 사용될 때 특별한 의미select명령 또는count
집계 기능.
기간 (.)가 사용됩니다 부동 소수점 상수 및 스키마, 테이블, 및 열 이름.
주석은 시작하는 임의의 캐릭터 순서입니다 이중 대시와 라인 끝까지 연장되면 예 :
- 이것은 표준 윈 토토92 댓글입니다
또는 C 스타일 블록 댓글을 사용할 수 있습니다 :
/* 멀티 린 댓글 * 중첩 : / * 중첩 블록 주석 * / */
주석이 시작되는 곳/*그리고 일치하는 발생으로 확장*/. 이 블록 주석은 지정된대로 둥지입니다 윈 토토99이지만 C와 달리 더 큰 블록을 주석 할 수 있습니다. 기존 블록 댓글을 포함 할 수있는 코드.
추가 전에 입력 스트림에서 주석이 제거됩니다. 구문 분석 및 효과적으로 대체됩니다 공백.
테이블 1-1의 우선 순위와 연관성을 보여줍니다 Postgre윈 토토의 연산자. 대부분의 운영자는 동일합니다 우선 순위와 왼쪽 연관성입니다. 우선 순위와 운영자의 연관성은 구문 분석기에 딱딱 해져 있습니다. 이것은 비 직관적 행동으로 이어질 수 있습니다. 예를 들어 부울 운영자<and다른 우선 순위가 있습니다 부울 운영자보다<=and =. 또한 때때로 필요할 것입니다 이진의 조합을 사용할 때 괄호를 추가합니다 단독 운영자. 예를 들어
5를 선택하십시오! -6;
|
5를 선택하십시오! (-6);
파서는 너무 늦을 때까지 파서에 전혀 모르기 때문에 - 저것!는 PostFix로 정의됩니다 운영자, 디스 픽스가 아닙니다. 원하는 행동을 얻기 위해 이 경우, 당신은 작성해야합니다
select (5!) -6;
이것은 확장 성을 위해 지불하는 가격입니다.
표 1-1. 연산자 우선 순위 (감소)
연산자/요소 | 연관성 | 설명 |
---|---|---|
. | 왼쪽 | 테이블/열 이름 분리기 |
:: | 왼쪽 | Postgre윈 토토-스타일 typecast |
[ ] | 왼쪽 | 배열 요소 선택 |
- | 오른쪽 | Unary 마이너스 |
^ | 왼쪽 | 지수 |
* / % | 왼쪽 | 곱셈, 분할, 모듈로 |
+ - | 왼쪽 | 추가, 뺄셈 |
is | 진실, 거짓, is 알려지지 않은, is null | |
isnull | null 테스트 | |
NOTNULL | 널 테스트 | |
(다른) | 왼쪽 | 기타 모든 기본 및 사용자 정의 연산자 |
in | 멤버십 설정 | |
사이 | 격리 | |
오버랩 | 시간 간격 겹침 | |
Like ilike 유사한 | 문자열 패턴 매칭 | |
< | 보다 | |
= | 오른쪽 | 평등, 과제 |
not | 오른쪽 | 논리적 부정 |
and | 왼쪽 | 논리적 연결 |
또는 | 왼쪽 | 논리적 분리 |
운영자 우선권 규칙도 적용됩니다 이름과 동일한 이름을 가진 사용자 정의 연산자 위에서 언급 한 내장 작업자. 예를 들어, 당신이 있다면 A 정의"+"일부 운영자 사용자 정의 데이터 유형은 내장"+"운영자, 상관없이 당신의 일.
스키마 자격을 갖춘 연산자 이름이 사용되는 경우운영자42384_42418
3 연산자 선택 (PG_CATALOG.+) 4;
the운영자구성이 취해졌습니다 기본 우선 순위를 표시하려면표 1-1for"다른"운영자. 이것은 사실입니다 어떤 특정 운영자 이름이 내부에 나타나든 상관 없습니다Operator ().
[1] |
인용되지 않은 이름을 소문자로 접는Postgre윈 토토호환되지 않습니다 윈 토토 표준을 사용하여 인용되지 않은 이름은 대문자로 접 힙니다. 따라서,foo"foo"아님"foo"표준에 따라. 만약에 당신은 당신이 조언하는 휴대용 응용 프로그램을 작성하고 싶습니다. 항상 특정 이름을 인용하거나 인용하지 마십시오. |
43999_44005 | 홈 | 다음 |
버그보고 가이드 라인 | up | 값 표현 |