PostgreSQL 9.0.23 문서화 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.0 : 토토 | up | 8 장. 데이터 유형 | PostgreSQL : 문서 : 9.0 : 객체 식별자 토토 베이 |
a무지개 토토 유형행 또는 레코드의 구조; 본질적으로 목록 일뿐입니다 필드 이름과 데이터 유형.PostgreSQL무지개 토토 유형을 사용할 수 있습니다 간단한 유형을 사용할 수있는 것과 같은 많은 방법으로. 을 위한 예, 테이블 열은 복합재로 선언 될 수 있습니다. 유형.
무지개 토토재 정의의 두 가지 간단한 예는 다음과 같습니다 유형 :
유형 Complex Complex AS ( r 이중 정밀도, 나는 두 배의 정밀도 ); inventory_item 유형 생성 ( 이름 텍스트, Supplier_id 정수, 가격 숫자 );
구문은와 비슷합니다.생성 테이블, 필드 이름과 유형 만 지정; 제약 조건 없음 (예 :널) 현재 포함될 수 있습니다.as키워드가 필수적입니다. 그것 없이는 시스템입니다 다른 종류의 생각생성 유형명령은 의미가 있으며 홀수 구문이 나타납니다 오류.
유형을 정의한 후, 우리는 그것들을 사용할 수 있습니다. 테이블 :
테이블 생성 on_hand ( 항목 inventory_item, 정수를 계산하십시오 ); on_hand 값에 삽입 (행 ( '퍼지 주사위', 42, 1.99), 1000);
또는 기능 :
함수 생성 price_extension (Inventory_item, Integer) 숫자를 반환합니다 AS 'SELECT $ 1. PRICE * $ 2'언어 SQL; on_hand에서 price_extension (항목, 10)을 선택하십시오.
테이블을 만들 때마다 무지개 토토 유형도 테이블과 동일한 이름으로 자동 생성 테이블의 행 유형을 나타냅니다. 예를 들어, 우리는 다음과 같이 말했습니다.
테이블 inventory_item 만들기 ( 이름 텍스트, Supplier_ID 정수 참조 공급 업체, 가격 숫자 점검 (가격 0) );
그런 다음inventory_item위에 표시된 무지개 토토 유형은 부산물, 위와 같이 사용할 수 있습니다. 그러나 참고 현재 구현의 중요한 제한 : 아니요 제약 조건은 무지개 토토 유형과 관련이 있습니다 테이블 정의에 표시된 제약 조건적용하지 마십시오의 값에 테이블 외부의 무지개 토토 유형. (부분적인 해결 방법은 다음과 같습니다 무지개 토토 유형의 구성원으로 도메인 유형을 사용하십시오.)
문자 그대로 상수로 무지개 토토 값을 작성하려면 Enclose 필드 값은 괄호 안에 값을 값으로 분리합니다 쉼표. 필드 값에 대해 이중 인용문을 넣을 수 있으며 쉼표 또는 괄호가 포함 된 경우 그렇게해야합니다. (자세한 내용 아래에 나타납니다.) 따라서 무지개 토토 상수의 일반적인 형식 다음은 다음과 같습니다.
'(val1 , Val2, ...) '
예는 다음과 같습니다.
'( "퍼지 주사위", 42,1.99)'
inventory_item위에 정의 된 유형. 만들기 위해 필드는 null이고, 그 위치에 전혀 캐릭터를 쓰지 않습니다. 목록. 예를 들어,이 상수는 널 3을 지정합니다 필드:
'( "퍼지 주사위", 42,)'
null이 아닌 빈 줄을 원한다면 더블을 쓰십시오. 인용 부호:
'( "", 42,)'
여기서 첫 번째 필드는 널 비 빈 문자열, 세 번째 필드입니다. NULL입니다.
(이 상수는 실제로 특별한 경우 일뿐입니다. 논의 된 일반 유형 상수에서섹션 4.1.2.7. 상수는 처음에 문자열로 취급됩니다 무지개 토토 유형 입력 변환 루틴에 전달되었습니다. an 명시 적 유형 사양이 필요할 수 있습니다.)
theRow표현 구문도 할 수 있습니다 무지개 토토 값을 구성하는 데 사용됩니다. 대부분의 경우 이것은입니다 문자열-문자 구문보다 사용하기가 상당히 간단합니다 여러 층의 인용문에 대해 걱정할 필요가 없기 때문입니다. 우리는 이미 위 의이 방법을 사용했습니다.
Row ( '퍼지 주사위', 42, 1.99) 행 ( '', 42, null)
행 키워드는 실제로 선택 사항입니다. 표현에 둘 이상의 필드가 있으므로 단순화 할 수 있습니다. 에게:
( '퍼지 주사위', 42, 1.99) ( '', 42, null)
theRow표현 구문입니다 에서 더 자세히 논의섹션 4.2.12.
무지개 토토 열의 필드에 액세스하려면 하나는 점을 씁니다. 테이블에서 필드를 선택하는 것과 매우 유사한 필드 이름 이름. 사실, 그것은 테이블 이름에서 선택하는 것과 매우 흡사합니다. 혼란을 피하기 위해 괄호를 사용해야하는 경우가 많습니다. 파서. 예를 들어, 일부 서브 필드를 선택하려고 할 수 있습니다 우리에게서on_hand예제 테이블이 있습니다 다음과 같은 것 :
item.name.name on_hand where.price 9.99; 이름을 선택하십시오.
이름 이후로 작동하지 않습니다항목열이 아닌 테이블 이름으로 간주됩니다. 이름on_hand, SQL 구문 규칙 별. 당신은 이것처럼 그것을 써야합니다 :
select (item) .name from on_hand where (item) .price 9.99;
또는 테이블 이름을 사용해야하는 경우 (예 : 다기체 쿼리에서) : :
select (on_hand.item) .name on_hand where (on_hand.item) .price 9.99;
이제 괄호 화 된 객체는 올바르게 해석됩니다 에 대한 참조항목열, 그런 다음 서브 필드는 그것에서 선택할 수 있습니다.
필드를 선택할 때마다 유사한 구문 문제가 적용됩니다 무지개 토토 값에서. 예를 들어, 하나의 필드 만 선택합니다 무지개 토토 값을 반환하는 함수의 결과에서 당신은 다음과 같은 것을 써야합니다 :
select (my_func (...)). 필드에서 ...
추가 괄호가 없으면 구문이 생성됩니다 오류.
삽입을위한 적절한 구문의 몇 가지 예입니다. 무지개 토토 열 업데이트. 먼저 삽입 또는 업데이트 a 전체 열 :
mytab (complex_col) 값 ((1.1,2.2))에 삽입; myTab set complex_col = row (1.1,2.2) 여기서 ...;
첫 번째 예는 생략row, 두 번째는 그것을 사용합니다. 우리는 어느 쪽이든 그것을 할 수있었습니다.
무지개 토토재의 개별 하위 필드를 업데이트 할 수 있습니다 열:
MyTab Set Complex_Col.r = (Complex_Col) .r + 1 Where ...; 업데이트
여기에 우리가 필요하지 않은 (그리고 실제로는 할 수 없음) 열 이름 주위의 괄호 안에 나타납니다set, 그러나 우리는 언제 괄호가 필요합니다 오른쪽 표현식에서 동일한 열을 참조 동등한 부호.
그리고 우리는 서브 필드를 대상으로 지정할 수 있습니다삽입, 또한 :
mytab에 삽입 (complex_col.r, complex_col.i) 값 (1.1, 2.2);
우리는 열, 나머지 서브 필드는 채워 졌을 것입니다 널 값.
복합 값의 외부 텍스트 표현 I/O에 따라 해석되는 항목으로 구성됩니다. 개별 필드 유형에 대한 전환 규칙, 플러스 복합 구조를 나타내는 장식. 그만큼 장식은 괄호로 구성됩니다 ((and)) 전체 값 주위에 쉼표 (,) 인접 항목 사이. 괄호 안에있는 공백은 무시되지만 괄호는 필드 값의 일부로 간주되며 또는 입력 변환에 따라 중요하지 않을 수 있습니다. 필드 데이터 유형에 대한 규칙. 예를 들어 :
'(42)'
필드 유형이 정수 인 경우 공백은 무시됩니다. 그러나 텍스트라면 아닙니다.
이전에 표시된대로 무지개 토토 값을 작성할 때 개별 필드 값에 이중 인용문을 작성하십시오. 너필수그렇다면 그렇게하십시오 그렇지 않으면 필드 값은 무지개 토토 값 파서를 혼동합니다. 특히, 괄호, 쉼표, 이중을 포함하는 필드 따옴표 또는 백 슬래시는 두 번 인용해야합니다. 더블을 넣으려면 인용 된 무지개 토토 필드 값의 견적 또는 백 슬래시, 백 슬래시가 있습니다. (또한, a 이중 인용문을 나타내는 데 두 배의 필드 값이 가져옵니다. 캐릭터, SQL의 단일 따옴표 규칙과 유사하게 문자 문자열.) 또는 인용 및 사용을 피할 수 있습니다 모든 데이터 문자를 보호하기위한 백 슬래시 에스케이프 그렇지 않으면 무지개 토토 구문으로 간주됩니다.
완전히 빈 필드 값 (그 사이의 문자가 전혀 없음 쉼표 또는 괄호)는 널을 나타냅니다. 값을 작성합니다 그것은 null이 아닌 빈 줄입니다. 쓰기"".
복합 출력 루틴에는 이중 인용문이 있습니다 필드 값이 빈 줄이거나 괄호를 포함하는 경우. 쉼표, 이중 따옴표, 백 슬래시 또는 공백. (그렇게합니다 공백의 경우 필수는 아니지만 가독성을 도와줍니다.) Double 필드 값에 포함 된 인용문 및 백 슬래시가 있습니다 두 배
참고 :SQL에 쓰는 내용을 기억하십시오 명령은 먼저 문자열 문자로 해석되며 그런 다음 복합재로. 이것은 백 슬래시 수를 두 배로 늘립니다 (Escape String 구문이 사용되었다고 가정)가 필요합니다. 을 위한 예, a텍스트필드 무지개 토토재에 이중 견적과 백 슬래시를 포함 가치, 당신은 다음을 쓸 필요가 있습니다 :
삽입 ... 값 (e '( "\\"\\\ ");String-Literal 프로세서는 한 레벨을 제거합니다 백 슬래시, 따라서 무지개 토토 값에 도착하는 것이 파서는( "\"\\ "). ~ 안에 회전, 끈으로 공급되는 문자열텍스트데이터 유형의 입력 루틴이됩니다"\. (입력 루틴이있는 데이터 유형으로 작업하는 경우 또한 뒷가로를 특별히 처리했는데,BYTEA예를 들어, 우리는 많은 것만큼 필요할 수 있습니다 명령에 8 개의 백 슬래시가 하나의 백 슬래시를 얻습니다. 저장된 무지개 토토 필드.) 달러 인용 (참조섹션 4.1.2.4) 두 배를 피하기 위해 사용할 수 있습니다. 백 슬래시.
팁 :therow생성자 구문은 일반적으로 작업보다 작업하기가 더 쉽습니다 무지개 토토 값을 작성할 때 무지개 토토 지표 구문 SQL 명령. 안에Row, 개인 필드 값은 작성되는 것과 같은 방식으로 작성됩니다. 무지개 토토 회원이 아닌 경우.