a토토 커뮤니티 유형행 또는 레코드의 구조; 본질적으로 그것은 단지 목록 일뿐입니다 필드 이름과 데이터 유형.PostgreSQL토토 커뮤니티 유형의 값을 허용합니다 간단한 유형과 같은 방식으로 사용하려면 사용된. 예를 들어, 테이블 열은 토토 커뮤니티 유형.
복합재 정의의 두 가지 간단한 예는 다음과 같습니다 유형 :
유형 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위에 표시된 토토 커뮤니티 유형은 부산물, 위와 같이 사용할 수 있습니다. 그러나 참고 현재 구현의 중요한 제한 : 아니요 제약 조건은 토토 커뮤니티 유형과 관련이 있습니다 테이블 정의에 표시된 제약 조건적용하지 마십시오의 값에 테이블 외부의 토토 커뮤니티 유형. (부분적인 해결 방법은 다음과 같습니다 토토 커뮤니티 유형의 구성원으로 도메인 유형을 사용하십시오.)
복합 값을 문자 그대로 상수로 작성하려면 필드 값은 괄호 안에 값을 값으로 분리합니다 쉼표. 필드 값에 대해 이중 인용문을 넣을 수 있으며 쉼표 또는 괄호가 포함 된 경우 그렇게해야합니다. (자세한 내용 아래에 나타납니다.) 따라서 복합 상수의 일반적인 형식 다음은 다음과 같습니다.
'(val1 , val2, ...) '
예는입니다.
'( "퍼지 주사위", 42,1.99)'
|inventory_item위에 정의 된 유형. 만들기 위해 필드는 null이고, 그 위치에 전혀 캐릭터를 쓰지 않습니다. 목록. 예를 들어,이 상수는 널 3을 지정합니다 필드:
'( "퍼지 주사위", 42,)'
null이 아닌 빈 줄을 원한다면 더블을 쓰십시오. 인용 부호:
'( "", 42,)'
여기서 첫 번째 필드는 널 비 빈 문자열, 세 번째 필드입니다. NULL입니다.
(이 상수는 실제로 특별한 경우 일뿐입니다. 논의 된 일반 유형 상수에서섹션 4.1.2.5. 상수는 처음에 문자열로 취급됩니다 토토 커뮤니티 유형 입력 변환 루틴에 전달되었습니다. an 명시 적 유형 사양이 필요할 수 있습니다.)
theRowExpression Syntax도 할 수 있습니다 토토 커뮤니티 값을 구성하는 데 사용됩니다. 대부분의 경우 이것은입니다 String-Literal Syntax보다 사용하기가 상당히 간단합니다. 여러 층의 인용문에 대해 걱정할 필요가 없기 때문입니다. 우리는 이미 위 의이 방법을 사용했습니다.
행 ( '퍼지 주사위', 42, 1.99) 행 ( '', 42, null)
행 키워드는 실제로 선택 사항입니다. 표현에 둘 이상의 필드가 있으므로 단순화 할 수 있습니다. 에게
( '퍼지 주사위', 42, 1.99) ( '', 42, null)
theRowExpression Syntax IS 에서 더 자세히 논의섹션 4.2.11.
토토 커뮤니티 칼럼의 필드에 액세스하려면 하나는 점을 씁니다. 테이블에서 필드를 선택하는 것과 매우 유사한 필드 이름 이름. 사실, 그것은 테이블 이름에서 선택하는 것과 매우 흡사합니다. 혼란을 피하기 위해 괄호를 사용해야하는 경우가 많습니다. 파서. 예를 들어, 일부 서브 필드를 선택하려고 할 수 있습니다 우리에게서on_hand예제 테이블이 있습니다 다음과 같은 것 :
item.name.name on_hand where.price 9.99; 이름을 선택하십시오.
이름 이후로 작동하지 않습니다항목필드가 아닌 테이블 이름으로 간주됩니다. 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)) 전체 값 주위에 쉼표 (,) 인접 항목 사이. 괄호 안에있는 공백은 무시되지만 괄호는 필드 값의 일부로 간주되며 5 월 또는 입력 변환에 따라 중요하지 않을 수 있습니다. 필드 데이터 유형에 대한 규칙. 예를 들어,
'(42)'
필드 유형이 정수 인 경우 공백은 무시됩니다. 그러나 텍스트라면 아닙니다.
앞에서 볼 수 있듯이 토토 커뮤니티 값을 작성할 때 개별 필드 값에 이중 인용문을 작성하십시오. 너필수그렇다면 그렇게하십시오 그렇지 않으면 필드 값은 토토 커뮤니티 값 파서를 혼동합니다. 특히, 괄호, 쉼표, 이중을 포함하는 필드 따옴표 또는 백 슬래시는 두 번 인용해야합니다. 더블을 넣으려면 인용 된 토토 커뮤니티 필드 값의 견적 또는 백 슬래시, 백 슬래시가 있습니다. (또한, a 이중 인용문을 나타내는 데 두 배의 필드 값이 가져옵니다. 캐릭터, SQL의 단일 따옴표 규칙과 유사하게 문자 그대로 문자열.) 또는 백 슬래시 에스코핑을 사용할 수 있습니다 그렇지 않으면 모든 데이터 문자를 보호하기 위해 토토 커뮤니티 구문.
완전히 빈 필드 값 (그 사이의 문자가 전혀 없음 쉼표 또는 괄호)는 널을 나타냅니다. 값을 작성합니다 그것은 null이 아닌 빈 줄입니다. 쓰기"".
복합 출력 루틴에는 이중 인용문이 있습니다 필드 값이 빈 줄이거나 괄호를 포함하는 경우. 쉼표, 이중 따옴표, 백 슬래시 또는 공백. (그렇게합니다 공백의 경우 필수는 아니지만 가독성을 도와줍니다.) Double 필드 값에 포함 된 인용문 및 백 슬래시가 있습니다 두 배
참고 :SQL에 쓰는 내용을 기억하십시오 명령은 먼저 문자열 문자로 해석되며 그런 다음 복합재로. 이것은 백 슬래시 수를 두 배로 늘립니다 당신은 필요합니다. 예를 들어, a를 삽입하려면텍스트이중 견적을 포함하는 필드와 a 토토 커뮤니티 가치의 백 슬래시, 당신은 쓸 필요가 있습니다
삽입 ... 값 ( '( "\\"\\\ ");String-Literal 프로세서는 한 레벨을 제거합니다 백 슬래시, 따라서 토토 커뮤니티 값에 도착하는 것이 파서는( "\"\\ "). ~ 안에 회전, 끈으로 공급되는 문자열텍스트데이터 유형의 입력 루틴이됩니다"\. (입력 루틴이있는 데이터 유형으로 작업하는 경우 또한 뒷가로를 특별히 처리했는데,BYTEA예를 들어, 우리는 많은 것만큼 필요할 수 있습니다 명령에 8 개의 백 슬래시가 하나의 백 슬래시를 얻습니다. 저장된 토토 커뮤니티 필드.) 달러 인용 (참조섹션 4.1.2.2) 두 배를 피하기 위해 사용될 수 있습니다. 백 슬래시.
팁 :theRow생성자 구문은 일반적으로 작업보다 작업하기가 더 쉽습니다 토토 커뮤니티 값을 작성할 때 토토 커뮤니티 지표 구문 SQL 명령. 안에Row, 개인 필드 값은 작성되는 것과 같은 방식으로 작성됩니다. 토토 커뮤니티 회원이 아닌 경우.