이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 8.15. 윈 스포츠 토토버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

8.10. 스포츠 토토

postgresql열을 허용합니다 가변 길이의 다차원 스포츠 토토로 정의되는 테이블. 내장 유형 또는 사용자 정의 유형의 스포츠 토토은 다음과 같습니다. 생성.

8.10.1. 스포츠 토토 유형 선언

스포츠 토토 유형의 사용을 설명하기 위해 우리는 이것을 만듭니다. 테이블:

테이블 생성 sal_emp (
    이름 텍스트,
    pay_by_quarter 정수 [],
    일정 텍스트 [] []
);

그림과 같이, 스포츠 토토 데이터 유형은 Square를 추가하여 명명됩니다. 브래킷 ([])의 데이터 유형 이름으로 스포츠 토토 요소. 위의 명령은라는 테이블을 만듭니다.sal_emp유형 열이있는텍스트(이름), 1 차원 유형정수(pay_by_quarter) 분기 별 직원의 급여 및 2 차원 스포츠 토토 의텍스트(일정)는 직원을 나타냅니다 주간 일정.

구문에 대한 구문테이블 생성허용 지정할 스포츠 토토의 정확한 크기 (예 :

테이블 생성 tictactoe (
    사각형 정수 [3] [3]
);

그러나 현재 구현은 그것을 시행하지 않습니다 스포츠 토토 크기 제한 --- 동작은 스포츠 토토과 동일합니다. 지정되지 않은 길이.

실제로, 현재 구현은 그것을 시행하지 않습니다 크기의 수가 선언되었습니다. 특정 스포츠 토토 요소 유형은 모두 같은 유형으로 간주됩니다. 크기 또는 치수 수에 관계없이. 그래서 선언합니다 치수 또는 크기의 수생성 테이블단순히 문서화되며 런타임에는 영향을 미치지 않습니다 행동.

대안, SQL99 표준 구문이 사용될 수 있습니다 1 차원 스포츠 토토.pay_by_quarter정의 될 수 있습니다 처럼:

pay_by_quarter 정수 스포츠 토토 [4],

이 구문은 스포츠 토토을 표시하기 위해 정수 상수가 필요합니다. 크기. 그러나 이전과 같이postgresql크기를 시행하지 않습니다 제한.

8.10.2. 정렬 값 입력

문자 그대로 상수로 스포츠 토토 값을 작성하려면 곱슬 버팀대 내의 요소 값과 쉼표로 분리하십시오. (C를 알고 있다면 이것은 C 구문과는 다릅니다. 구조 초기화.) 주위에 이중 인용문을 넣을 수 있습니다 요소 값, 쉼표 또는 곱슬이 포함 된 경우 그렇게해야합니다. 바지 멜빵. (자세한 내용은 아래에 표시됩니다.) 따라서 일반적인 형식입니다 스포츠 토토 상수의 다음은 다음과 같습니다.

'val1 delim Val2 delim... '

여기서delimDelimiter입니다 그 유형의 문자, 그 유형에 기록 된대로PG_TYPE입력. (모든 내장 유형의 경우 이것은입니다 쉼표 캐릭터",".) 각val는 스포츠 토토의 상수입니다 요소 유형 또는 서브 어레이. 스포츠 토토 상수의 예 이다

'1,2,3, 4,5,6, 7,8,9'

이 상수는 2 차원, 3 x 3 스포츠 토토입니다 정수의 세 가지 서브 배달 중.

(이러한 종류의 스포츠 토토 상수는 실제로 특별한 것입니다. 논의 된 일반 유형 상수의 경우섹션 4.1.2.4. 상수는 처음에 문자열로 취급됩니다 스포츠 토토 입력 변환 루틴으로 전달되었습니다. 명시 적 유형 사양이 필요할 수 있습니다.)

이제 우리는 일부를 보여줄 수 있습니다삽입진술.

sal_emp에 삽입하십시오
    값 ( 'Bill',
    '10000, 10000, 10000, 10000',
    ' "meeting", "lunch", ');

sal_emp에 삽입하십시오
    값 ( '캐롤',
    '20000, 25000, 25000, 25000',
    ' "talk", "consult",  "meeting"');

현재 스포츠 토토 구현의 한계는 그다 스포츠 토토의 개별 요소는 SQL NULL 값일 수 없습니다. 그만큼 전체 스포츠 토토을 NULL로 설정할 수 있지만 스포츠 토토을 가질 수는 없습니다. 일부 요소가 널이고 일부는 그렇지 않습니다.

이것은 놀라운 결과로 이어질 수 있습니다. 예를 들어 결과 이전 두 삽입물 중 다음과 같습니다.

sal_emp에서 * 선택 *;
 이름 |      pay_by_quarter |      일정
-------+--------------------------------------------------
 빌 | 10000,10000,10000,10000 | 회의,""
 캐롤 | 20000,25000,25000,25000 | talk, meeting

왜냐하면[2] [2]요소일정각각에서 누락되었습니다삽입진술,[1] [2]요소가 폐기되었습니다.

참고 :이 수정은 할 일 목록에 있습니다.

the스포츠 토토표현 구문 5 월 또한 사용됩니다 :

sal_emp에 삽입하십시오
    값 ( 'Bill',
    스포츠 토토 [10000, 10000, 10000, 10000],
    스포츠 토토 [[ 'meeting', 'lunch'], [ '', '']));

sal_emp에 삽입하십시오
    값 ( '캐롤',
    스포츠 토토 [20000, 25000, 25000, 25000],
    스포츠 토토 [[ 'talk', 'consult'], [ 'meeting', '']));
sal_emp에서 *를 선택하십시오;
 이름 |      pay_by_quarter |           일정
-------+--------------------------------------------------------------------
 빌 | 10000,10000,10000,10000 | 회의, 점심,  "", ""
 캐롤 | 20000,25000,25000,25000 | talk, consult, meeting, ""

이 구문을 사용하면 다차원 스포츠 토토이 있어야합니다 각 차원마다 일치하는 범위가 있습니다. 불일치는 an을 유발합니다 오류 보고서는 이전 사례. 예를 들어:

sal_emp에 삽입하십시오
    값 ( '캐롤',
    스포츠 토토 [20000, 25000, 25000, 25000],
    스포츠 토토 [[ 'talk', 'consult'], [ 'meeting']]);
오류 : 다차원 스포츠 토토은 치수와 일치하는 스포츠 토토 표현식이 있어야합니다

또한 스포츠 토토 요소는 일반 SQL입니다 상수 또는 표현; 예를 들어, 문자열 리터럴입니다 단일 인용문은 스포츠 토토 문자. 그만큼스포츠 토토표현 구문은에서 더 자세히 설명합니다.섹션 4.2.10.

8.10.3. 스포츠 토토 액세스

이제 테이블에서 일부 쿼리를 실행할 수 있습니다. 먼저, 우리는 보여줍니다 한 번에 스포츠 토토의 단일 요소에 액세스하는 방법. 이것 Query는 급여가 변경된 직원의 이름을 검색합니다. 2 분기 :

pay_by_quarter [1] < pay_by_quarter [2];

 이름
-------
 축가
(1 행)

스포츠 토토 위시 번호는 정사각형 내에 기록됩니다 브래킷. 기본적으로PostgreSQL하나의 숫자를 사용합니다 스포츠 토토 컨벤션, 즉, 스포츠 토토n요소는로 시작합니다.스포츠 토토 [1]스포츠 토토 [n].

이 쿼리는 모두의 3 분기 급여를 검색합니다 직원:

sal_emp에서 pay_by_quarter [3]를 선택하십시오.

 pay_by_quarter
---------------
          10000
          25000
(2 줄)

스포츠 토토의 임의의 직사각형 조각에도 액세스 할 수 있습니다. 또는 서브 사업. 스포츠 토토 슬라이스는 쓰기로 표시됩니다하위 바운드:상한하나 이상의 스포츠 토토 치수의 경우. 예를 들어,이 쿼리 Bill의 첫 두 일정에 대한 첫 번째 항목을 검색합니다. 요일 :

Sal_emp에서 일정을 선택하십시오 [1 : 2] [1 : 1] 여기서 이름 = 'Bill';

      일정
-------------------
 회의,""

우리는 또한 글을 쓸 수 있습니다

sal_emp에서 일정을 선택하십시오 [1 : 2] [1] where name = 'bill';

동일한 결과가 있습니다. 스포츠 토토 첨자 작업은 다음과 같습니다 스포츠 토토 슬라이스를 나타내는 데 항상 구역은 양식으로 작성됩니다Lower:어퍼. 1의 하한이 가정됩니다 이와 같이 하나의 값 만 지정된 모든 첨자에 대해 예:

sal_emp에서 일정을 선택하십시오 [1 : 2] [2] where name = 'bill';
         일정
-------------------------------
 회의, 점심,  "", ""

모든 스포츠 토토 값의 현재 치수를 검색 할 수 있습니다. 와 함께array_dims기능 :

sal_emp에서 array_dims (일정)를 선택하여 이름 = 'carol';

 Array_dims
------------
 [1 : 2] [1 : 1]
(1 행)

array_dims생산 A텍스트결과, 편리합니다 사람들은 읽을 수 있지만 프로그램에 편리하지는 않습니다. 치수는로 검색 할 수도 있습니다.array_upperandArray_Lower, 상단과 하단을 반환합니다 지정된 스포츠 토토 치수의 경계.

sal_emp에서 array_upper (일정, 1)를 선택하여 이름 = 'carol';

 array_upper
-------------
           2
(1 행)

8.10.4. 스포츠 토토 수정

스포츠 토토 값을 완전히 대체 할 수 있습니다 :

업데이트 sal_emp set pay_by_quarter = '25000,25000,27000,27000'
    여기서 이름 = '캐롤';

또는 사용스포츠 토토표현 통사론:

업데이트 sal_emp set pay_by_quarter = 스포츠 토토 ​​[25000,25000,27000,27000]
    여기서 이름 = '캐롤';

스포츠 토토은 단일 요소로 업데이트 될 수 있습니다 :

업데이트 Sal_emp Set Pay_by_Quarter [4] = 15000
    여기서 이름 = 'Bill';

또는 슬라이스로 업데이트 :

업데이트 Sal_emp Set Pay_by_Quarter [1 : 2] = '27000,27000'
    여기서 이름 = '캐롤';

저장된 스포츠 토토 값은 이미 존재하는 사람들에 인접하거나 이미 존재하는 데이터에 인접하거나 겹치는 슬라이스. 예를 들어, 스포츠 토토MyArray현재 4 개의 요소가 있으며 다음은 5 개의 요소가 있습니다. 에 할당하는 업데이트MyArray [5]. 현재 이러한 방식으로 확대하는 것은 허용됩니다 다차원 스포츠 토토이 아닌 1 차원 스포츠 토토.

스포츠 토토 슬라이스 할당은 그렇지 않은 스포츠 토토을 생성 할 수 있습니다. 하나의 기반 구역을 사용하십시오. 예를 들어에 할당 할 수 있습니다.MyArray [-2 : 7]-2에서 7로 실행되는 첨자 값

새로운 스포츠 토토 값은 연결 연산자,||.

스포츠 토토 선택 [1,2] || 스포츠 토토 [3,4];
 ?열?
----------
 1,2,3,4

연결 연산자는 단일 요소를 허용합니다 1 차원 스포츠 토토의 시작 또는 끝으로 밀려났습니다. 또한 두 가지를 받아들입니다n-차원 스포츠 토토 또는 ann-차원 및 ann+1-차원 스포츠 토토.

단일 요소가 a의 시작 부분으로 밀면 1 차원 스포츠 토토, 결과는 더 낮은 스포츠 토토입니다. 오른쪽 피연산자의 하한과 동일한 바운드 하위 스크립트 첨자, 마이너스 1. 단일 요소가 1 차원 스포츠 토토의 끝, 결과는 스포츠 토토입니다. 왼쪽 피연산자의 하한을 유지합니다. 을 위한 예:

array_dims (1 || 스포츠 토토 [2,3]);
 Array_dims
------------
 [0 : 2]
(1 줄)

array_dims를 선택하십시오 (스포츠 토토 [1,2] || 3);
 Array_dims
------------
 [1 : 3]
(1 행)

같은 수의 치수를 가진 두 개의 스포츠 토토 일 때 연결된 결과, 결과는 하한 첨자를 유지한다 왼쪽 피연산자의 외부 치수. 결과는 스포츠 토토입니다 왼쪽 피연산자의 모든 요소를 ​​포함합니다 오른쪽 피연산자의 모든 요소. 예를 들어:

array_dims를 선택하십시오 (Array [1,2] || 스포츠 토토 [3,4,5]);
 Array_dims
------------
 [1 : 5]
(1 줄)

Array_dims (Array [[1,2], [3,4]] || 스포츠 토토 [[5,6], [7,8], [9,0]]);
 Array_dims
------------
 [1 : 5] [1 : 2]
(1 행)

언제n-차원 스포츠 토토 의 시작 또는 끝으로 밀려납니다.n+1-차원 스포츠 토토은 결과입니다 위의 요소 스포츠 토토 사례와 유사합니다. 각n-차원 서브 어레이는 본질적으로 an입니다 요소n+1-차원 스포츠 토토의 외부 치수. 예를 들어:

array_dims를 선택하십시오 (Array [1,2] || 스포츠 토토 [[3,4], [5,6]]);
 Array_dims
------------
 [0 : 2] [1 : 2]
(1 행)

함수를 사용하여 스포츠 토토을 구성 할 수도 있습니다array_prepend, Array_Append또는array_cat. 처음 두 가지만 지원합니다 1 차원 스포츠 토토이지만array_cat다차원 스포츠 토토을 지원합니다. 위에서 논의한 연결 연산자는 IS입니다 이러한 기능을 직접 사용하는 것보다 선호됩니다. 사실, 함수는 주로 구현에 사용하기위한 것입니다 연결 연산자. 그러나 직접 유용 할 수 있습니다 사용자 정의 집계의 생성. 몇 가지 예 :

array_prepend (1, array [2,3]);
 array_prepend
-----------------
 1,2,3

8.10.5. 스포츠 토토 검색

스포츠 토토에서 값을 검색하려면 각 값을 확인해야합니다. 스포츠 토토의. 당신이 크기를 알고 있다면 이것은 손으로 할 수 있습니다. 스포츠 토토. 예를 들어:

select *에서 sal_emp에서 pay_by_quarter [1] = 10000 또는
                            pay_by_quarter [2] = 10000 또는
                            pay_by_quarter [3] = 10000 또는
                            pay_by_quarter [4] = 10000;

그러나 이것은 큰 스포츠 토토에 대해 빠르게 지루하게됩니다 스포츠 토토의 크기가 확실하지 않은 경우 도움이되지 않습니다. an 대체 방법은에 설명되어 있습니다.섹션 9.17. 위의 쿼리 대체 할 수 있습니다 :

select *에서 sal_emp에서 10000 = any (pay_by_quarter);

또한 스포츠 토토에 모든 행을 찾을 수 있습니다. 다음과 같은 값은 다음과 같습니다.

SELECT *에서 sal_emp에서 10000 = ALL (pay_by_quarter);

팁 :스포츠 토토이 설정되지 않았습니다. 구체적인 검색 스포츠 토토 요소는 데이터베이스 잘못 디자인의 표시 일 수 있습니다. 각 항목에 대해 행이있는 별도 테이블 사용 고려 그것은 스포츠 토토 요소 일 것입니다. 이것은 더 쉬울 것입니다 검색, 많은 수치로 더 나은 확장을 할 가능성이 높습니다. 요소의.

8.10.6. 정렬 입력 및 출력 구문

스포츠 토토 값의 외부 텍스트 표현은 구성됩니다 I/O 변환에 따라 해석되는 항목 스포츠 토토의 요소 유형에 대한 규칙과 장식 스포츠 토토 구조를 나타냅니다. 장식은 곱슬으로 구성됩니다 브레이스 (and) 스포츠 토토 값과 구분 기호 주변 인접한 항목 사이의 문자. 구분자 캐릭터는입니다 보통 쉼표 (,) 다른 것 : 그것은에 의해 결정됩니다typdelim스포츠 토토의 요소 유형 설정. (에 제공된 표준 데이터 유형 중PostgreSQL분포, 유형Box세미콜론 사용 (;) 그러나 다른 모든 사람들은 쉼표를 사용합니다.) a 다차원 스포츠 토토, 각 차원 (행, 평면, 큐브 등) 자체 수준의 곱슬 브레이스를 얻고 구분자는 동일한 인접한 곱슬 브레이시 엔티티 사이에 쓰여졌습니다 수준. 왼쪽 버팀대 앞에 공백을 쓸 수 있습니다. 오른쪽 버팀대 또는 개별 항목 문자열 이전. 공백 그러나 항목을 무시하지 않은 후 : 선두를 건너 뛰는 후 Whitespace, 다음 오른쪽 브레이스 또는 구분 기에 이르기까지 모든 것 항목 값으로 간주됩니다.

이전에 표시된대로 스포츠 토토 값을 작성할 때 개별 스포츠 토토 요소에 이중 인용문을 작성하십시오. 너필수그렇다면 그렇게하십시오 요소 값은 그렇지 않으면 스포츠 토토 값 파서를 혼동합니다. 예를 들어, 곱슬 버팀대, 쉼표 (또는 Delimiter 캐릭터가 무엇이든), 이중 인용문, 백 슬래시 또는 선행 공백은 두 배로 인용해야합니다. 에게 인용 된 스포츠 토토 요소에 이중 견적 또는 백 슬래시를 넣으십시오. 값은 백 슬래시로 앞에 있습니다. 또는 사용할 수 있습니다 모든 데이터 문자를 보호하기위한 백 슬래시 에스케이프 그렇지 않으면 스포츠 토토 구문 또는 무지한 흰색으로 간주됩니다 공간.

스포츠 토토 출력 루틴에는 이중 인용문이 있습니다 비어 있거나 곱슬 함유하는 경우 요소 값 버팀대, 구분자 문자, 이중 인용문, 백 슬래시, 또는 여백. 이중 인용문 및 백 슬래시 요소에 포함됩니다 값은 백 슬래시로 향합니다. 숫자 데이터 유형의 경우입니다 이중 인용문이 나타나지 않을 것이라고 가정하는 것이 안전하지만 텍스트 데이터 유형 중 하나에 대처할 준비가되어 있어야합니다. 인용문의 유무. (이것은 행동의 변화입니다 7.2 이전에서postgresql릴리스)

참고 :SQL에 쓰는 내용을 기억하십시오 명령은 먼저 문자열 문자로 해석되며 그런 다음 스포츠 토토로. 이것은 백 슬래시 수를 두 배로 늘립니다 당신은 필요합니다. 예를 들어, a를 삽입하려면텍스트백 슬래시를 포함하는 스포츠 토토 값 및 a 이중 인용문, 당신은 쓸 필요가 있습니다

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

String-Literal 프로세서는 한 레벨을 제거합니다 백 슬래시, 스포츠 토토 값 파서에 도착하는 것이 같아요"\\", "\" ". 차례로,텍스트데이터 유형의 입력 루틴이됩니다\"각각. (우리가 그랬다면 입력 루틴도 처리 한 데이터 유형으로 작업 특별히 백 슬래시,BYTEA예를 들어, 우리는 저장된 스포츠 토토에 하나의 백 슬래시를 가져 오려는 명령 요소.)

팁 :the스포츠 토토생성자 구문은 종종 작업하기가 더 쉽습니다. SQL에서 스포츠 토토 값을 작성할 때 어레이-문자 구문 명령. 안에스포츠 토토, 개인 요소 값은 동일한 방식으로 작성됩니다. 스포츠 토토 멤버가 아닌 경우 작성.