8.16. 스포츠 토토 사이트 유형#

A 스포츠 토토 사이트 유형행 또는 레코드의 구조를 나타냅니다. 본질적으로 필드 이름과 데이터 유형 목록입니다.PostgreSQL간단한 유형을 사용할 수있는 것과 동일한 방법으로 스포츠 토토 사이트 유형을 사용할 수 있습니다. 예를 들어, 테이블 열은 스포츠 토토 사이트 유형으로 선언 될 수 있습니다.

8.16.1. 스포츠 토토 사이트 유형 선언#

스포츠 토토 사이트 유형 정의의 두 가지 간단한 예는 다음과 같습니다.

유형 Complex Complex AS (

구문은와 비슷합니다.테이블 생성, 필드 이름과 유형 만 지정할 수 있다는 점을 제외하고; 제약 조건 없음 (예 :NOT NULL) 현재 포함될 수 있습니다.as키워드가 필수적입니다. 그것 없이는 시스템이 다른 종류의 생각을 생각할 것입니다유형 만들기명령은 의미이며 홀수 구문 오류가 발생합니다.

유형을 정의한 후 테이블을 만들 수 있습니다.

테이블 생성 on_hand (

또는 기능 :

함수 작성 price_extension (Inventory_item, Integer) 숫자를 반환합니다

테이블을 만들 때마다 테이블의 행 유형을 나타 내기 위해 테이블과 동일한 이름으로 스포츠 토토 사이트 유형이 자동으로 작성됩니다. 예를 들어, 우리는 다음과 같이 말했습니다.

테이블 inventory_item 만들기 (

그런 다음inventory_item위에 표시된 스포츠 토토 사이트 유형은 부산물로 나타나며 위와 같이 사용할 수 있습니다. 그러나 현재 구현의 중요한 제한 사항 : 스포츠 토토 사이트 유형과 관련이 없으므로 표 정의에 표시된 제약 조건적용하지 마십시오테이블 외부의 스포츠 토토 사이트 유형의 값. (이 문제를 해결하려면 A도메인스포츠 토토 사이트 유형을 통해 원하는 제약 조건을에 적용합니다.check도메인의 제약.)

8.16.2. 복합 값 구성#

문자 그대로 상수로 스포츠 토토 사이트 값을 작성하려면 괄호 안에 필드 값을 둘러싸고 쉼표로 분리하십시오. 필드 값 주위에 이중 인용문을 넣을 수 있으며 쉼표 또는 괄호가 포함 된 경우 그렇게해야합니다.아래.) 따라서 복합 상수의 일반적인 형식은 다음과 같습니다.

'(val1 , val2, ...) '

예는 다음과 같습니다.

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

의 유효한 값이 될 것입니다inventory_item위에 정의 된 유형. 필드를 무효화하려면 목록에서 캐릭터를 전혀 쓰지 마십시오.

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

null이 아닌 빈 문자열을 원한다면 이중 인용문을 작성하십시오 :

'( "", 42,)'

여기서 첫 번째 필드는 널 비 빈 줄, 세 번째 필드는 널입니다.

(이 상수는 실제로 논의 된 일반 유형 상수의 특별한 경우입니다섹션 4.1.2.7. 상수는 처음에 문자열로 처리되고 스포츠 토토 사이트 유형 입력 변환 루틴으로 전달됩니다.

theRow표현 구문을 사용하여 스포츠 토토 사이트 값을 구성 할 수도 있습니다. 대부분의 경우 여러 층의 인용 레이어에 대해 걱정할 필요가 없기 때문에 문자열 라이터 구문보다 사용하기가 상당히 간단합니다.

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

표현식에 둘 이상의 필드가있는 한 행 키워드는 실제로 선택 사항입니다.

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

theRowExpression Syntax에 대해 자세히 설명합니다.섹션 4.2.13.

8.16.3. 스포츠 토토 사이트 유형 액세스#

스포츠 토토 사이트 열의 필드에 액세스하려면 테이블 이름에서 필드를 선택하는 것과 매우 유사한 점과 필드 이름을 씁니다. 실제로, 그것은 테이블 이름에서 선택하는 것과 매우 흡사합니다. 파서를 혼란스럽게하기 위해 괄호를 사용해야하는 경우가 많습니다.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 (...)). 필드에서 ...

추가 괄호가 없으면 구문 오류가 발생합니다.

특별 필드 이름*평균모든 필드, 추가 설명대로섹션 8.16.5.

8.16.4. 스포츠 토토 사이트 유형 수정#

복합 열을 삽입 및 업데이트하기위한 적절한 구문의 몇 가지 예는 다음과 같습니다. 먼저 전체 열을 삽입하거나 업데이트합니다.

mytab (complex_col) 값 ((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);

열의 모든 서브 필드에 대한 값을 공급하지 않았다면 나머지 서브 필드는 널 값으로 채워 졌을 것입니다.

8.16.5. 쿼리에서 스포츠 토토 사이트 유형 사용#

쿼리에는 스포츠 토토 사이트 유형과 관련된 다양한 특수 구문 규칙 및 동작이 있습니다. 이 규칙은 유용한 바로 가기를 제공하지만 그 뒤에 논리를 모르면 혼란 스러울 수 있습니다.

inPostgreSQL, 쿼리의 테이블 이름 (또는 별칭)에 대한 참조는 사실상 테이블의 현재 행의 복합 값에 대한 참조입니다. 예를 들어, 테이블이 있다면inventory_item표시된대로, 우리는 다음을 쓸 수 있습니다 :

inventory_item c;에서 c를 선택하십시오.

이 쿼리는 단일 복합 값 열을 생성하므로 다음과 같은 출력을 얻을 수 있습니다.

c

간단한 이름은 테이블 이름 이전에 열 이름과 일치 하므로이 예제는 열이 없기 때문에 작동합니다c쿼리 테이블에서.

평범한 자격을 갖춘 컬럼-이름 구문table_name.column_name적용으로 이해할 수 있습니다필드 선택테이블의 현재 행의 복합 값으로. (효율성의 이유로 실제로 그런 식으로 구현되지는 않습니다.)

우리가 쓸 때

select c.* inventory_item c;

그런 다음 SQL 표준에 따라 표의 내용을 별도의 열로 확장해야합니다.

이름 | Supplier_id |

쿼리가있는 것처럼

inventory_item c;에서 c.name, c.supplier_id, c.price를 선택하십시오.

PostgreSQL이 확장 동작을 스포츠 토토 사이트 값 표현식에 적용 할 것입니다., 그 값 주위에 괄호를 작성해야합니다..*간단한 테이블 이름이 아닐 때마다 적용됩니다. 예를 들어, ifmyfunc ()열이있는 스포츠 토토 사이트 유형을 반환하는 함수a, bc,이 두 쿼리는 같은 결과를 가져옵니다.

select (myfunc (x)).*에서 some_table;

PostgreSQL첫 번째 양식을 실제로 두 번째 형식으로 변환하여 열 확장을 처리합니다. 그래서이 예에서myfunc ()두 구문으로 행당 3 회 호출됩니다. 비싼 기능이라면 다음과 같은 쿼리로 수행 할 수있는 것을 피하고 싶을 수도 있습니다.

select m.*에서 some_table에서 m.

a에 함수 배치측면 항목은 행 당 두 번 이상 호출되지 않도록합니다.m.*여전히 확장되었습니다M.A, M.B, M.C, 그러나 이제 그 변수는의 출력에 대한 참조 일뿐입니다.항목. (그만큼측면키워드는 여기에서 선택 사항이지만 함수가 얻고 있음을 명확히하기 위해xFromsome_table.)

thecomposite_value.*구문은 A의 최상위 레벨에 나타날 때 이러한 종류의 열 확장을 초래합니다select출력 목록, a반환Listin삽입/업데이트/삭제/병합, a또는 A행 생성자. 다른 모든 상황에서 (해당 구성 중 하나 안에 중첩 될 때 포함) 첨부.*스포츠 토토 사이트 값으로의 값은 값을 변경하지 않습니다.모든 열따라서 동일한 스포츠 토토 사이트 값이 다시 생성됩니다. 예를 들어, ifsomefunc ()스포츠 토토 사이트 값 인수를 받아들이고,이 쿼리는 동일합니다.

Inventory_item C에서 몇 가지 푸치 (c.*)를 선택하십시오.

두 경우 모두 현재 행inventory_item는 단일 스포츠 토토 사이트 값 인수로 함수로 전달됩니다. 일지라도.*그러한 경우에는 스포츠 토토 사이트 값이 의도된다는 것이 분명하기 때문에 좋은 스타일이 아닙니다. 특히 파서는 고려할 것입니다cinc.*열 이름이 아닌 테이블 이름 또는 별칭을 참조하여 모호성이 없습니다. 반면.*,c테이블 이름 또는 열 이름을 의미하며 실제로 열이라는 열이있는 경우 열 이름 해석이 선호됩니다c.

이러한 개념을 보여주는 또 다른 예는 이러한 모든 쿼리가 같은 것을 의미한다는 것입니다.

inventory_item c order에서 선택 * 선택 *;

이 모든 것들주문 byClauses 행의 스포츠 토토 사이트 값을 지정하여에 설명 된 규칙에 따라 행을 정렬합니다.섹션 9.25.6. 그러나 ifinventory_itemc, 첫 번째 케이스는 해당 열로 만 분류하는 것을 의미하기 때문에 다른 경우와 다릅니다. 이전에 표시된 열 이름을 감안할 때 이러한 쿼리는 위의 쿼리와 동일합니다.

select * from inventory_item c order by row (c.name, c.supplier_id, c.price);

(마지막 경우는 키워드가있는 행 생성자를 사용합니다Row생략.)

스포츠 토토 사이트 값과 관련된 또 다른 특별한 구문 행동은 우리가 사용할 수 있다는 것입니다기능 표기스포츠 토토 사이트 값의 필드 추출. 이것을 설명하는 간단한 방법은 표기법입니다필드(테이블)and테이블.필드상호 교환 가능합니다. 예를 들어,이 쿼리는 다음과 같습니다.

inventory_item C에서 c.name을 선택하십시오. 여기서 c.price> 1000;

또한 스포츠 토토 사이트 유형의 단일 인수를 받아들이는 함수가 있으면 두 가지 표기법으로 호출 할 수 있습니다. 이 쿼리는 모두 동일합니다 :

Inventory_item C에서 몇 가지 푸치 (c)를 선택하십시오.

기능적 표기법과 필드 표기법 간의이 동등성은 스포츠 토토 사이트 유형에서 함수를 사용할 수 있도록컴퓨팅 필드. 위의 마지막 쿼리를 사용하는 응용 프로그램은 그 사실을 직접 알 필요가 없습니다somefunc테이블의 실제 열이 아닙니다.

이 동작으로 인해 단일 스포츠 토토 사이트 유형 인수를 스포츠 토토 사이트 유형의 필드와 동일한 이름과 동일한 이름으로 사용하는 기능을 제공하는 것은 현명하지 않습니다. 모호성이 있으면 필드 이름 해석이 필드 이름 구문을 사용하는 경우 필드 이름 해석이 선택되며 함수 전화 구문이 사용되면 함수가 선택됩니다.PostgreSQL11 이전의 버전은 통화의 구문이 함수 호출이 필요하지 않는 한 항상 필드 이름 해석을 선택합니다. 이전 버전에서 함수 해석을 강요하는 한 가지 방법은 함수 이름, 즉 write 스키마 자격을 얻는 것입니다.스키마.func(CompositeValue).

8.16.6. 스포츠 토토 사이트 유형 입력 및 출력 구문#

복합 값의 외부 텍스트 표현은 개별 필드 유형의 I/O 변환 규칙에 따라 해석되는 항목과 복합 구조를 나타내는 장식으로 구성됩니다. 장식은 괄호로 구성됩니다 ((and)) 전체 값 주위, 쉼표 (),) 인접 항목 사이. 괄호 안에있는 공백은 무시되지만 괄호 안에서 필드 값의 일부로 간주되며 필드 데이터 유형의 입력 변환 규칙에 따라 중요하지 않을 수도 있습니다.

'(42)'

필드 유형이 정수 인 경우 공백은 무시됩니다.

앞에서 볼 수 있듯이, 복합 값을 작성할 때 모든 필드 값에 대한 이중 인용문을 작성할 수 있습니다. 너필수필드 값이 복합 값 파서를 혼동하는 경우 그렇게하십시오. 특히 괄호, 쉼표, 이중 인용문 또는 백 슬래시를 포함하는 필드는 두 번 인용해야합니다.

완전히 빈 필드 값 (쉼표 또는 괄호 사이에 전혀 문자가 없음)은 널을 나타냅니다. 널보다는 빈 문자열 인 값을 쓰려면 쓰기"".

복합 출력 루틴은 비어 있거나 괄호, 쉼표, 이중 인용구, 백 슬래시 또는 공백을 포함하는 경우 필드 값 주위에 이중 따옴표를 표시합니다. (공백의 경우 그렇게하는 것은 필수는 아니지만 AIDS의 가독성.) 필드 값에 포함 된 이중 인용문과 백 슬래시는 두 배가됩니다.

Note

SQL 명령에 쓰는 내용은 먼저 문자열 문자로 해석 된 다음 복합재로 해석됩니다. 이것은 필요한 백 슬래시 수를 두 배로 늘립니다 (Escape String 구문이 사용되었다고 가정).텍스트복합 값의 이중 견적과 백 슬래시가 포함 된 필드 :

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

String-Literal 프로세서는 한 수준의 백 슬래시를 제거하여 복합 값 파서에 도착하는 것이( "\"\\ "). 차례로, 문자열은에 공급됩니다.텍스트데이터 유형의 입력 루틴이됩니다"\. (입력 루틴이 특별히 백 슬래시를 처리 한 데이터 유형으로 작업하는 경우BYTEA예를 들어, 저장된 복합 필드에 하나의 백 슬래시를 가져 오려면 명령에 8 개의 백 슬래시가 필요할 수 있습니다.) 달러 인용 (참조섹션 4.1.2.4) 배가 슬래시를 두 배로 늘릴 필요가없는 것을 피하기 위해 사용될 수 있습니다.

theRow생성자 구문은 일반적으로 SQL 명령에 스포츠 토토 사이트 값을 작성할 때 스포츠 토토 사이트 문자 구문보다 일반적으로 작업하기가 더 쉽습니다. 안에Row, 개별 필드 값은 복합 부재가 아닌 경우 작성되는 것과 동일한 방식으로 작성됩니다.

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면