이 문서는 지원되지 않는 토토 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 8.16. 스포츠 토토 사이트 유형버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

8.15. 토토 유형

A 토토 유형설명합니다 행 또는 레코드의 구조; 그것은 본질적으로 단지 다음의 목록일 뿐입니다. 필드 이름 및 해당 데이터 유형입니다.토토토토 유형의 값을 허용합니다. 단순 유형과 동일한 방식으로 사용됩니다. 사용된. 예를 들어, 테이블의 열은 다음과 같이 선언될 수 있습니다. 복합형.

8.15.1. 토토 유형 선언

다음은 복합 정의에 대한 두 가지 간단한 예입니다. 유형:

CREATE TYPE 토토 AS(
    r 배정밀도,
    나는 이중 정밀도
);

CREATE TYPE Inventory_item AS(
    이름 텍스트,
    공급자_ID 정수,
    가격 숫자
);

구문은 다음과 비슷합니다.만들기 테이블, 단, 필드 이름과 유형만 가능함 지정됨; 제약 없음(예:아님 NULL)는 현재 포함될 수 있습니다. 참고하세요AS키워드는 필수입니다. 그것 없이는 시스템 꽤 다른 종류의 생각을 할 것이다만들기 유형명령을 의미하며 이상한 구문이 표시됩니다. 오류.

유형을 정의한 후 이를 사용하여 다음을 생성할 수 있습니다. 테이블:

직접 테이블 생성(
    품목 Inventory_item,
    정수 카운트
);

INSERT INTO on_hand VALUES (ROW('퍼지 주사위', 42, 1.99), 1000);

또는 함수:

CREATE FUNCTION 가격_확장(inventory_item, 정수) RETURNS 숫자
AS 'SELECT $1.price * $2' LANGUAGE SQL;

현재 보유 중인 가격 확장(항목, 10) 선택;

테이블을 생성할 때마다 토토 유형도 테이블과 동일한 이름으로 자동 생성됩니다. 테이블의 행 유형을 나타냅니다. 예를 들어, 다음과 같이 말했습니다.

CREATE TABLE Inventory_item(
    이름 텍스트,
    공급자_ID 정수 REFERENCES 공급업체,
    가격 숫자 확인(가격  0)
);

그럼 마찬가지inventory_item위에 표시된 토토 유형은 부산물이며 위와 같이 사용할 수 있습니다. 그러나 참고 현재 구현의 중요한 제한 사항: 아니오 제약 조건은 토토 유형과 연관되어 있습니다. 테이블 정의에 표시된 제약 조건적용하지 않음값에 테이블 외부의 토토 유형. (부분적인 해결 방법은 다음과 같습니다. 토토 유형의 멤버로 도메인 유형을 사용합니다.)

8.15.2. 복합값 입력

복합 값을 리터럴 상수로 쓰려면 다음을 포함하십시오. 괄호 안에 필드 값을 입력하고 다음으로 구분합니다. 쉼표. 필드 값 앞뒤에 큰따옴표를 넣을 수 있습니다. 쉼표나 괄호가 포함된 경우에는 그렇게 해야 합니다. (자세한 내용은 아래에 나타납니다.) 따라서 합성 상수의 일반적인 형식은 다음은 다음과 같습니다:

'( 발1 , 발2 , ... )'

예는 다음과 같습니다:

'("퍼지 주사위",42,1.99)'

이것은 유효한 값이 될 것입니다.inventory_item위에 정의된 유형입니다. 만들려면 필드가 NULL이면 해당 위치에 문자를 전혀 쓰지 않습니다. 목록. 예를 들어, 이 상수는 NULL 3분의 1을 지정합니다. 필드:

'("퍼지 주사위",42,)'

NULL이 아닌 빈 문자열을 원하면 double을 쓰세요 인용 부호:

'("",42,)'

여기서 첫 번째 필드는 NULL이 아닌 빈 문자열이고, 세 번째 필드는 NULL입니다.

(이 상수는 실제로 다음의 특별한 경우일 뿐입니다. 에서 논의된 일반 유형 상수섹션 4.1.2.5. 상수는 처음에는 문자열로 처리되며 토토형 입력 변환 루틴으로 전달됩니다. 안 명시적인 유형 지정이 필요할 수 있습니다.)

ROW표현식 구문도 가능 토토 값을 구성하는 데 사용됩니다. 대부분의 경우 이는 문자열 리터럴 구문보다 사용하기가 훨씬 간단합니다. 여러 레이어의 인용에 대해 걱정할 필요가 없기 때문입니다. 위에서 이미 이 방법을 사용했습니다.

ROW('퍼지 주사위', 42, 1.99)
ROW('', 42, NULL)

ROW 키워드는 실제로 선택 사항입니다. 표현식에 둘 이상의 필드가 있으므로 이를 단순화할 수 있습니다. 에게:

('퍼지 주사위', 42, 1.99)
('', 42, NULL)

ROW표현식 구문은 다음과 같습니다. 더 자세히 논의됨섹션 4.2.11.

8.15.3. 토토 유형에 액세스

토토 열의 필드에 접근하려면 점을 씁니다. 테이블에서 필드를 선택하는 것과 마찬가지로 필드 이름 이름. 실제로 이는 테이블 이름에서 선택하는 것과 매우 유사합니다. 혼동을 피하기 위해 종종 괄호를 사용해야 하는 경우가 있습니다. 파서. 예를 들어 일부 하위 필드를 선택하려고 할 수 있습니다. 우리의현재예제 테이블 다음과 같은 것:

현재 보유하고 있는 WHERE item.price  9.99에서 item.name을 선택하세요.

이름 이후로는 작동하지 않습니다.항목필드가 아닌 테이블 이름으로 간주됩니다. 이름, SQL 구문 규칙에 따라. 다음과 같이 작성해야 합니다.

선택 (항목).이름 FROM 현재 WHERE (항목).가격  9.99;

또는 테이블 이름도 사용해야 하는 경우(예: 다중 테이블 쿼리에서) 다음과 같습니다:

SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price  9.99;

이제 괄호 안에 있는 개체는 다음과 같이 올바르게 해석됩니다. 에 대한 참조항목열, 그리고 하위 필드를 선택할 수 있습니다.

필드를 선택할 때마다 유사한 구문 문제가 적용됩니다. 복합 값에서. 예를 들어 필드 하나만 선택하려면 복합 값을 반환하는 함수의 결과에서 다음과 같이 작성해야 합니다.

SELECT (my_func(...)).field FROM ...

추가 괄호가 없으면 구문이 실행됩니다. 오류.

8.15.4. 토토 유형 수정

다음은 삽입을 위한 올바른 구문의 몇 가지 예입니다. 복합 열을 업데이트합니다. 먼저, 전체 열:

INSERT INTO mytab(complex_col) VALUES((1.1,2.2));

업데이트 mytab SET complex_col = ROW(1.1,2.2) WHERE ...;

첫 번째 예에서는 생략ROW, 두 번째는 그것을 사용합니다. 어느 쪽이든 할 수 있었을 텐데.

토토의 개별 하위 필드를 업데이트할 수 있습니다 열:

mytab 설정 업데이트 complex_col.r = (complex_col).r + 1 WHERE ...;

여기에 우리가 넣을 필요가 없다는 점에 주목하세요. 바로 뒤에 나타나는 열 이름 주위에 괄호SET, 하지만 다음과 같은 경우에는 괄호가 필요합니다. 오른쪽에 있는 표현식에서 동일한 열을 참조하는 경우 등호.

그리고 하위 필드를 대상으로 지정할 수 있습니다.삽입도:

mytab에 삽입(complex_col.r, complex_col.i) VALUES(1.1, 2.2);

우리가 모든 하위 필드에 값을 제공하지 않았다면 열의 나머지 하위 필드는 다음으로 채워졌을 것입니다. null 값입니다.

8.15.5. 토토 유형 입력 및 출력 구문

복합 값의 외부 텍스트 표현 I/O에 따라 해석되는 항목으로 구성됩니다. 개별 필드 유형에 대한 변환 규칙 및 복합구조를 나타내는 장식. 그만큼 장식은 괄호()로 구성됩니다.(그리고)) 전체 값 주위에 더하기 쉼표(,)을 인접한 항목 사이에 배치합니다. 괄호 밖의 공백은 무시되지만 괄호는 필드 값의 일부로 간주되며 또는 입력 변환에 따라 중요하지 않을 수도 있습니다. 필드 데이터 유형에 대한 규칙입니다. 예를 들어, 다음과 같습니다:

'(  42)'

필드 유형이 정수인 경우 공백은 무시됩니다. 하지만 텍스트인 경우에는 그렇지 않습니다.

이전에 표시된 것처럼 복합 값을 쓸 때 다음을 수행할 수 있습니다. 개별 필드 값 주위에 큰따옴표를 씁니다. 너반드시그러면 그렇게 하세요 그렇지 않으면 필드 값이 복합 값 구문 분석기를 혼동하게 됩니다. 특히 괄호, 쉼표, 이중 문자가 포함된 필드 따옴표 또는 백슬래시는 큰따옴표로 묶어야 합니다. 더블을 넣으려면 따옴표로 묶인 복합 필드 값의 따옴표 또는 백슬래시, 앞에 백슬래시를 사용합니다. (또한 한 쌍의 큰따옴표는 큰따옴표로 묶인 필드 값은 큰따옴표를 나타내는 데 사용됩니다. 문자(SQL의 작은따옴표 규칙과 유사) 리터럴 문자열.) 또는 백슬래시 이스케이프를 사용할 수 있습니다. 그렇지 않으면 다음과 같이 간주되는 모든 데이터 문자를 보호합니다. 복합 구문.

완전히 비어 있는 필드 값(사이에 문자가 전혀 없음) 쉼표 또는 괄호)는 NULL을 나타냅니다. 값을 쓰려면 NULL이 아닌 빈 문자열이면 다음과 같이 작성하세요."".

토토 출력 루틴은 주위에 큰따옴표를 넣습니다. 필드 값이 빈 문자열이거나 괄호를 포함하는 경우 쉼표, 큰따옴표, 백슬래시 또는 공백. (그러면서 공백은 필수는 아니지만 가독성을 높이는 데 도움이 됩니다.) 필드 값에 포함된 따옴표와 백슬래시는 두 배로 늘었습니다.

참고:당신이 SQL에 작성한 내용을 기억하십시오 명령은 먼저 문자열 리터럴로 해석됩니다. 그럼 합성으로. 백슬래시 수가 두 배로 늘어납니다. 필요합니다(이스케이프 문자열 구문이 사용된다고 가정). 을 위한 예를 들어, a를 삽입하려면텍스트필드 합성물에 큰따옴표와 백슬래시가 포함되어 있음 값을 입력하려면 다음을 작성해야 합니다.

삽입 ... 값 (E'("\\"\\\\")');

문자열 리터럴 프로세서는 다음 수준 중 하나를 제거합니다. 백슬래시를 사용하여 합성 값에 도달하는 내용 파서는 다음과 같습니다("\"\\"). ~ 안에 차례, 문자열은텍스트데이터 유형의 입력 루틴은 다음과 같습니다."\. (입력 루틴이 있는 데이터 유형으로 작업하는 경우 백슬래시도 특별히 처리했습니다.바이테아예를 들어, 우리는 백슬래시 하나를 가져오려면 명령에 백슬래시 8개를 입력하세요. 저장된 토토 필드입니다.) 달러 인용(참조섹션 4.1.2.2)를 사용하면 두 배로 늘릴 필요가 없습니다. 백슬래시.

팁:ROW생성자 구문은 일반적으로 다음보다 작업하기가 더 쉽습니다. 복합 값을 작성할 때 복합 리터럴 구문 SQL 명령. 안에ROW, 개인 필드 값은 작성되는 방식과 동일하게 작성됩니다. 토토의 구성원이 아닌 경우.