F.43. tablefunc — 토토 핫을 반환하는 함수(토토 핫및 기타)#

토토 핫펑크모듈에는 토토 핫(즉, 여러 행)을 반환하는 다양한 함수가 포함되어 있습니다. 이러한 함수는 그 자체로도 유용하며 여러 행을 반환하는 C 함수를 작성하는 방법의 예로도 유용합니다.

이 모듈은 고려됩니다.신뢰할 수 있는, 즉, 슈퍼유저가 아닌 사용자가 설치할 수 있습니다.만들기현재 데이터베이스에 대한 권한입니다.

F.43.1. 제공되는 기능#

표 F.33에서 제공하는 기능을 요약합니다.토토 핫펑크모듈.

표 F.33. 토토 핫펑크기능

기능

설명

normal_rand ( 숫자 정수, 평균 float8, stddev float8 ) → setof float8

정규 분포된 무작위 값 세트를 생성합니다.

토토 핫 ( sql 텍스트 ) → 레코드 집합

생성피벗 토토 핫행 이름 + 포함N값 열, 여기서N호출 쿼리에 지정된 행 유형에 따라 결정됩니다.

토토 핫N ( sql 텍스트 ) → setof table_crosstab_N

생성피벗 토토 핫행 이름 + 포함N값 열.토토 핫2, 토토 핫3토토 핫4미리 정의되어 있지만 추가로 생성할 수 있습니다.토토 핫N아래 설명된 대로 기능합니다.

토토 핫 ( source_sql 텍스트, category_sql 텍스트 ) → 레코드 집합

생성피벗 토토 핫두 번째 쿼리에 의해 지정된 값 열로.

토토 핫 ( sql 텍스트, N 정수 ) → 레코드 집합

사용되지 않는 버전토토 핫(텍스트). 매개변수N15410_15505

커넥트비 ( relname 텍스트, keyid_fld 텍스트, parent_keyid_fld 텍스트 [, orderby_fld 텍스트 ], start_with 텍스트, 최대_깊이 정수 [, branch_delim 텍스트 ] ) → 레코드 집합

계층적 트리 구조의 표현을 생성합니다.


F.43.1.1. normal_rand #

normal_rand(int numvals, float8 평균, float8 stddev)는 setof float8을 반환합니다.

normal_rand정규 분포된 무작위 값 세트(가우스 분포)를 생성합니다.

숫자함수에서 반환할 값의 개수입니다.평균값의 정규 분포의 평균이고stddev값의 정규 분포의 표준 편차입니다.

예를 들어, 이 호출은 평균이 5이고 표준편차가 3인 1000개의 값을 요청합니다.

테스트=# SELECT * FROM Normal_rand(1000, 5, 3);
     노멀_랜드
---------
     1.56556322244898
     9.10040991424657
     5.36957140345079
   -0.369151492880995
    0.283600703686639
       .
       .
       .
     4.82992125404908
     9.71308014517282
     2.49639286969028
(1000행)

F.43.1.2. 토토 핫(텍스트) #

토토 핫(텍스트 SQL)
토토 핫(텍스트 sql, int N)

토토 핫함수는 생성에 사용됩니다.피벗디스플레이, 여기서 데이터는 아래가 아닌 페이지 전체에 나열됩니다. 예를 들어 다음과 같은 데이터가 있을 수 있습니다.

행1 발11
행1 발12
행1 발13
...
행2 발21
행2 발22
행2 발23
...

다음과 같이 표시하고 싶습니다

row1 발11 발12 발13 ...
행2 발21 발22 발23 ...
...

토토 핫함수는 첫 번째 방식으로 형식이 지정된 원시 데이터를 생성하는 SQL 쿼리인 텍스트 매개변수를 사용하고 두 번째 방식으로 형식이 지정된 테이블을 생성합니다.

sql매개변수는 데이터의 소스 세트를 생성하는 SQL 문입니다. 이 문은 하나를 반환해야 합니다.row_name열, 하나범주열, 그리고 하나열.N은 더 이상 사용되지 않는 매개변수이며 제공되면 무시됩니다(이전에는 출력 값 열의 수와 일치해야 했지만 이제는 호출 쿼리에 의해 결정됩니다).

예를 들어 제공된 쿼리는 다음과 같은 집합을 생성할 수 있습니다.

row_name 고양이 값
--------+---------+-------
  행1 cat1 발1
  행1 고양이2 발2
  행1 cat3 발3
  행1 cat4 발4
  행2 고양이1 발5
  행2 고양이2 발6
  행2 cat3 발7
  행2 cat4 val8

토토 핫함수가 반환되도록 선언되었습니다.레코드 집합, 따라서 출력 열의 실제 이름과 유형은발신소명절선택문, 예:

SELECT * FROM crosstab('...') AS ct(행_이름 텍스트, 카테고리_1 텍스트, 카테고리_2 텍스트);

이 예는 다음과 같은 집합을 생성합니다:

<== 값 열 ==
 행_이름 카테고리_1 카테고리_2
----------+------------+------------
  행1 값1 값2
  행2 발5 발6

발신절은 출력을 하나로 정의해야 합니다.row_name열(SQL 쿼리의 첫 번째 결과 열과 동일한 데이터 유형) 뒤에 N열(모두 SQL 쿼리의 세 번째 결과 열과 동일한 데이터 유형) 원하는 만큼 출력 값 열을 설정할 수 있습니다. 출력 열의 이름은 귀하가 결정합니다.

토토 핫함수는 동일한 입력 행의 연속된 각 그룹에 대해 하나의 출력 행을 생성합니다.row_name값. 출력을 채웁니다.열, 왼쪽에서 오른쪽으로,이 행의 필드입니다. 그룹에 출력된 행보다 적은 행이 있는 경우열, 추가 출력 열은 null로 채워집니다. 행이 더 있으면 추가 입력 행을 건너뜁니다.

실제로 SQL 쿼리는 항상 다음을 지정해야 합니다.1,2 단위로 주문입력 행이 올바르게 정렬되었는지, 즉 동일한 값이 있는지 확인합니다.행_이름은 함께 모여 행 내에서 올바르게 정렬됩니다. 참고하세요토토 핫자체는 쿼리 결과의 두 번째 열에 전혀 주의를 기울이지 않습니다. 페이지 전체에 세 번째 열 값이 표시되는 순서를 제어하기 위해 정렬할 뿐입니다.

다음은 완전한 예입니다:

CREATE TABLE ct(id SERIAL, rowid TEXT, 속성 TEXT, 값 TEXT);
INSERT INTO ct(rowid, 속성, 값) VALUES('test1','att1','val1');
INSERT INTO ct(rowid, 속성, 값) VALUES('test1','att2','val2');
INSERT INTO ct(rowid, 속성, 값) VALUES('test1','att3','val3');
INSERT INTO ct(rowid, 속성, 값) VALUES('test1','att4','val4');
INSERT INTO ct(rowid, 속성, 값) VALUES('test2','att1','val5');
INSERT INTO ct(rowid, 속성, 값) VALUES('test2','att2','val6');
INSERT INTO ct(rowid, 속성, 값) VALUES('test2','att3','val7');
INSERT INTO ct(rowid, 속성, 값) VALUES('test2','att4','val8');

선택 *
토토 핫에서(
  'rowid, 속성, 값 선택
   CT에서
   여기서 속성 = ''att2'' 또는 속성 = ''att3''
   1,2' 단위로 주문하세요)
AS ct(행_이름 텍스트, 카테고리_1 텍스트, 카테고리_2 텍스트, 카테고리_3 텍스트);

 행_이름 | 카테고리_1 | 카테고리_2 | 카테고리_3
----------+------------+------------+------------
 테스트1 | 발2 | 발3 |
 테스트2 | 발6 | 발7 |
(2행)

항상 다음을 작성하지 않아도 됩니다.발신절은 원하는 출력 행 유형이 해당 정의에 연결된 사용자 정의 토토 핫 함수를 설정하여 출력 열을 정의합니다. 이에 대해서는 다음 섹션에서 설명합니다. 또 다른 가능성은 필수를 포함하는 것입니다.발신뷰 정의의 절.

참고

또한 참조\crosstabview명령 입력psql, 다음과 유사한 기능을 제공합니다.토토 핫().

F.43.1.3. 토토 핫N(텍스트) #

토토 핫N(텍스트 SQL)

토토 핫N함수는 일반용 사용자 정의 래퍼를 설정하는 방법의 예입니다.토토 핫함수이므로 호출 시 열 이름과 유형을 작성할 필요가 없습니다.선택질의.토토 핫펑크모듈 포함토토 핫2, 토토 핫3토토 핫4, 출력 행 유형은 다음과 같이 정의됩니다.

CREATE TYPE tablefunc_crosstab_N AS(
    행_이름 TEXT,
    카테고리_1 텍스트,
    카테고리_2 텍스트,
        .
        .
        .
    카테고리_N TEXT
);

따라서 이러한 함수는 입력 쿼리가 생성될 때 직접 사용할 수 있습니다.행_이름그리고유형의 열텍스트, 2, 3 또는 4개의 출력 값 열이 필요합니다. 다른 모든 방법에서는 위에서 설명한 일반 사항과 정확히 동일하게 작동합니다.토토 핫함수.

예를 들어, 이전 섹션에 제공된 예는 다음과 같이 작동합니다.

선택 *
토토 핫3(
  'rowid, 속성, 값 선택
   CT에서
   여기서 속성 = ''att2'' 또는 속성 = ''att3''
   1,2' 단위로 주문);

이 기능은 주로 설명 목적으로 제공됩니다. 기본을 기반으로 고유한 반환 유형과 함수를 만들 수 있습니다.토토 핫()함수. 이를 수행하는 방법에는 두 가지가 있습니다.

  • 다음의 예와 유사하게 원하는 출력 열을 설명하는 복합 유형을 생성합니다.contrib/tablefunc/tablefunc--1.0.sql. 그런 다음 하나를 허용하는 고유한 함수 이름을 정의합니다.텍스트매개변수 및 반환setof your_type_name, 그러나 동일한 기본에 연결토토 핫C 함수. 예를 들어 소스 데이터가 다음과 같은 행 이름을 생성하는 경우텍스트및 다음과 같은 값float8, 5개의 값 열을 원합니다:

    CREATE TYPE my_crosstab_float8_5_cols AS(
        my_row_name 텍스트,
        my_category_1 float8,
        my_category_2 float8,
        my_category_3 float8,
        my_category_4 float8,
        my_category_5 float8
    );
    
    함수 생성 또는 교체 crosstab_float8_5_cols(text)
        my_crosstab_float8_5_cols 세트를 반환합니다.
        AS '$libdir/tablefunc','crosstab' LANGUAGE C STABLE STRICT;
  • 사용밖으로매개변수를 사용하여 반환 유형을 암시적으로 정의합니다. 동일한 예를 다음과 같이 수행할 수도 있습니다.

    함수 생성 또는 교체 crosstab_float8_5_cols(
        텍스트로,
        OUT my_row_name 텍스트,
        OUT my_category_1 float8,
        OUT my_category_2 float8,
        OUT my_category_3 float8,
        OUT my_category_4 float8,
        OUT my_category_5 float8)
      RETURNS 레코드 세트
      AS '$libdir/tablefunc','crosstab' LANGUAGE C STABLE STRICT;

F.43.1.4. 토토 핫(텍스트, 텍스트) #

토토 핫(텍스트 source_sql, 텍스트 카테고리_sql)

단일 매개변수 형식의 주요 제한사항토토 핫은 그룹의 모든 값을 동일하게 처리하여 각 값을 사용 가능한 첫 번째 열에 삽입한다는 것입니다. 값 열이 특정 데이터 범주에 해당하도록 하려고 하는데 일부 그룹에 일부 범주에 대한 데이터가 없을 수 있는 경우에는 제대로 작동하지 않습니다. 의 2개 매개변수 형식토토 핫출력 열에 해당하는 범주의 명시적 목록을 제공하여 이 경우를 처리합니다.

source_sql은 데이터의 소스 세트를 생성하는 SQL 문입니다. 이 문은 하나를 반환해야 합니다.행_이름열, 하나범주열, 그리고 하나열. 하나 이상이 있을 수도 있습니다.추가열.row_name열이 첫 번째여야 합니다.범주그리고열은 순서대로 마지막 두 열이어야 합니다. 사이의 모든 열row_name그리고범주다음과 같이 취급됩니다.추가.추가열은 동일한 모든 행에 대해 동일할 것으로 예상됩니다.row_name값.

예를 들어,source_sql다음과 같은 집합을 생성할 수 있습니다.

SELECT row_name, extra_col, cat, value FROM foo ORDER BY 1;

 row_name extra_col 고양이 값
----------+------------+------+---------
  row1 extra1 cat1 val1
  행1 추가1 cat2 val2
  행1 추가1 cat4 val4
  row2 extra2 cat1 val5
  row2 extra2 cat2 val6
  row2 extra2 cat3 val7
  row2 extra2 cat4 val8

category_sql범주 세트를 생성하는 SQL 문입니다. 이 문은 하나의 열만 반환해야 합니다. 최소한 하나의 행을 생성해야 합니다. 그렇지 않으면 오류가 생성됩니다. 또한 중복된 값을 생성해서는 안 됩니다. 그렇지 않으면 오류가 발생합니다.category_sql다음과 같을 수 있습니다:

foo ORDER BY 1에서 고유한 고양이 선택;
    고양이
  -------
    고양이1
    고양이 2
    고양이3
    고양이4

토토 핫함수가 반환되도록 선언되었습니다.레코드 집합, 따라서 출력 열의 실제 이름과 유형은발신소명절선택문, 예:

SELECT * FROM 토토 핫('...', '...')
    AS ct(row_name 텍스트, 추가 텍스트, cat1 텍스트, cat2 텍스트, cat3 텍스트, cat4 텍스트);

이것은 다음과 같은 결과를 낳습니다:

<== 값 열 ==
row_name 추가 cat1 cat2 cat3 cat4
---------+-------+------+------+------+------
  행1 추가1 발1 발2 발4
  row2 extra2 val5 val6 val7 val8

발신절은 적절한 데이터 유형의 출력 열의 적절한 수를 정의해야 합니다. 있는 경우Nsource_sql쿼리 결과, 첫 번째N-2개는 첫 번째와 일치해야 합니다N-2 출력 열. 나머지 출력 열은의 마지막 열 유형을 가져야 합니다.source_sql쿼리의 결과이며, 쿼리의 행 수와 정확히 일치해야 합니다.category_sql쿼리 결과입니다.

토토 핫함수는 동일한 입력 행의 연속 그룹마다 하나의 출력 행을 생성합니다.row_name값. 출력row_name열 및 기타추가열은 그룹의 첫 번째 행에서 복사됩니다. 출력열은 다음으로 채워집니다.일치하는 행의 필드범주값. 행의 경우범주다음의 출력과 일치하지 않습니다.category_sql쿼리, 그것무시됩니다. 그룹의 어떤 입력 행에도 일치하는 범주가 없는 출력 열은 null로 채워집니다.

실제로는source_sql쿼리는 항상 지정해야 함1개씩 주문값이 동일한지 확인하기 위해row_name함께 모였습니다. 그러나 그룹 내 카테고리의 순서는 중요하지 않습니다. 또한,의 순서가 올바른지 확인하는 것이 중요합니다.category_sql쿼리의 출력이 지정된 출력 열 순서와 일치합니다.

다음은 두 가지 완전한 예입니다:

판매 테이블 생성(연도 정수, 월 정수, 수량 정수);
판매액에 삽입(2007, 1, 1000);
판매액에 삽입(2007, 2, 1500);
판매액에 삽입(2007, 7, 500);
판매액에 삽입(2007, 11, 1500);
판매액에 삽입(2007, 12, 2000);
판매액에 삽입(2008, 1, 1000);

토토 핫에서 *를 선택합니다(
  '판매주문서에서 연도, 월, 수량을 1씩 선택',
  'generate_series(1,12) m에서 m을 선택하세요.'
)로 (
  연도 정수,
  "Jan" 정수,
  "2월" 정수,
  "3월" int,
  "4월" 정수,
  "5월" 정수,
  "준" 정수,
  "7월" int,
  "8월" 정수,
  "9월" 정수,
  "10월" 정수,
  "11월" int,
  "12월" 정수
);
 년 | 1월 | 2월 | 3월 | 4월 | 5월 | 준 | 7월 | 8월 | 9월 | 10월 | 11월 | 12월
------+------+------+------+------+-----+------+------+------+------+------+------+------
 2007년 | 1000 | 1500 |     |     |     |     | 500 |     |     |     | 1500 | 2000
 2008 | 1000 |      |     |     |     |     |     |     |     |     |      |
(2행)
CREATE TABLE cth(rowid 텍스트, rowdt 타임스탬프, 속성 텍스트, val 텍스트);
INSERT INTO cth VALUES('test1','2003년 3월 1일','온도','42');
INSERT INTO cth VALUES('test1','2003년 3월 1일','test_result','PASS');
INSERT INTO cth VALUES('test1','2003년 3월 1일','volts','2.6987');
INSERT INTO cth VALUES('test2','2003년 3월 2일','온도','53');
INSERT INTO cth VALUES('test2','2003년 3월 2일','test_result','FAIL');
INSERT INTO cth VALUES('test2','2003년 3월 2일','test_startdate','2003년 3월 01일');
INSERT INTO cth VALUES('test2','2003년 3월 2일','volts','3.1234');

SELECT * FROM 토토 핫
(
  'SELECT rowid, rowdt, 속성, 값 FROM cth ORDER BY 1',
  'Cth ORDER BY 1에서 DISTINCT 속성 선택'
)
그대로
(
       로우이드 텍스트,
       rowdt 타임스탬프,
       온도 정수4,
       테스트_결과 텍스트,
       test_startdate 타임스탬프,
       볼트 float8
);
 로우이드 |          행트 | 온도 | 테스트_결과 |      테스트_시작일 | 볼트
--------+---------------+------------+-------------+---------------+---------
 테스트1 | 2003년 3월 1일 토요일 00:00:00 |          42 | 패스 |                          | 2.6987
 테스트2 | 2003년 3월 2일 일요일 00:00:00 |          53 | 실패 | 2003년 3월 1일 토요일 00:00:00 | 3.1234
(2행)

각 쿼리에서 결과 열 이름과 유형을 작성하지 않아도 되도록 사전 정의된 함수를 생성할 수 있습니다. 이전 섹션의 예를 참조하세요. 이 형식의 기본 C 함수는토토 핫이름이 지정됨crosstab_hash.

F.43.1.5. 커넥트비 #

connectby(텍스트 relname, 텍스트 keyid_fld, 텍스트 parent_keyid_fld
          [, 텍스트 orderby_fld ], 텍스트 start_with, int max_length
          [, 텍스트 Branch_delim ])

커넥트바이함수는 토토 핫에 저장된 계층적 데이터를 표시합니다. 토토 핫에는 행을 고유하게 식별하는 키 필드와 각 행의 상위(있는 경우)를 참조하는 상위 키 필드가 있어야 합니다.커넥트바이모든 행에서 내려오는 하위 트리를 표시할 수 있습니다.

표 F.34매개변수를 설명합니다.

표 F.34. 커넥트바이매개변수

매개변수 설명
relname 소스 관계의 이름
keyid_fld 키 필드 이름
parent_keyid_fld 상위 키 필드 이름
orderby_fld 형제를 정렬할 필드 이름(선택 사항)
start_with 시작할 행의 키 값
최대_깊이 하강할 최대 깊이 또는 무제한 깊이의 경우 0
branch_delim 분기 출력에서 키를 구분하는 문자열(선택 사항)

키 및 상위 키 필드는 모든 데이터 유형이 될 수 있지만 동일한 유형이어야 합니다. 참고하세요start_with값은 키 필드 유형에 관계없이 텍스트 문자열로 입력되어야 합니다.

커넥트바이함수가 반환되도록 선언되었습니다.레코드 집합, 따라서 출력 열의 실제 이름과 유형은발신소명절선택문, 예:

SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0, '~')
    AS t(keyid 텍스트, parent_keyid 텍스트, 레벨 int, 분기 텍스트, pos int);

처음 두 개의 출력 열은 현재 행의 키와 상위 행의 키에 사용됩니다. 테이블의 키 필드 유형과 일치해야 합니다. 세 번째 출력 열은 트리의 깊이이며 유형이어야 합니다.정수. 만약에branch_delim매개변수가 지정되었습니다. 다음 출력 열은 분기 표시이며 유형이어야 합니다.텍스트. 마지막으로 만약에orderby_fld매개변수가 지정되었습니다. 마지막 출력 열은 일련 번호이며 유형이어야 합니다.정수.

분기출력 열에는 현재 행에 도달하기 위해 사용된 키의 경로가 표시됩니다. 키는 지정된 값으로 구분됩니다.branch_delim문자열. 분기 표시를 원하지 않으면 다음을 모두 생략하십시오.branch_delim매개변수 및 출력 열 목록의 분기 열.

같은 부모의 형제자매 순서가 중요하다면 다음을 포함하세요.orderby_fld동위 항목을 정렬할 필드를 지정하는 매개변수입니다. 이 필드는 정렬 가능한 모든 데이터 유형이 될 수 있습니다. 출력 열 목록은 다음과 같은 경우에만 최종 정수 일련 번호 열을 포함해야 합니다.orderby_fld지정되었습니다.

테이블 및 필드 이름을 나타내는 매개변수는 있는 그대로 SQL 쿼리에 복사됩니다.커넥트바이내부적으로 생성됩니다. 따라서 이름에 대소문자가 혼합되어 있거나 특수 문자가 포함된 경우 큰따옴표를 포함하십시오. 테이블 이름을 스키마로 한정해야 할 수도 있습니다.

큰 토토 핫에서는 상위 키 필드에 색인이 없으면 성능이 저하됩니다.

중요한 것은branch_delim문자열은 어떤 키 값에도 나타나지 않습니다. else커넥트바이무한 재귀 오류를 잘못 보고할 수 있습니다. 만약에 참고하세요branch_delim제공되지 않음, 기본값은~재귀 감지 목적으로 사용됩니다.

다음은 예입니다:

CREATE TABLE connectby_tree(keyid 텍스트, parent_keyid 텍스트, pos int);

INSERT INTO connectby_tree VALUES('row1',NULL, 0);
INSERT INTO connectby_tree VALUES('row2','row1', 0);
INSERT INTO connectby_tree VALUES('row3','row1', 0);
INSERT INTO connectby_tree VALUES('row4','row2', 1);
INSERT INTO connectby_tree VALUES('row5','row2', 0);
INSERT INTO connectby_tree VALUES('row6','row4', 0);
INSERT INTO connectby_tree VALUES('row7','row3', 0);
INSERT INTO connectby_tree VALUES('row8','row6', 0);
INSERT INTO connectby_tree VALUES('row9','row5', 0);

-- 브랜치 있음, orderby_fld 없음(결과 순서는 보장되지 않음)
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row2', 0, '~')
 AS t(키 ID 텍스트, parent_keyid 텍스트, 레벨 int, 분기 텍스트);
 키ID | 부모_키ID | 수준 |       가지
--------+---------------+-------+---------
 행2 |              |     0 | 행 2
 행4 | 행2 |     1 | 2행~4행
 행 6 | 행4 |     2 | 행2~행4~행6
 행8 | 행 6 |     3 | 행2~행4~행6~8행
 행 5 | 행2 |     1 | 2행~5행
 행9 | 행 5 |     2 | 2행~5행~9행
(6열)

-- 분기 없음, orderby_fld 없음(결과 순서는 보장되지 않음)
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row2', 0)
 AS t(keyid 텍스트, parent_keyid 텍스트, level int);
 키ID | 부모_키ID | 레벨
--------+---------------+-------
 행2 |              |     0
 행4 | 행2 |     1
 행 6 | 행4 |     2
 행8 | 행 6 |     3
 행 5 | 행2 |     1
 행9 | 행 5 |     2
(6열)

-- 분기 포함, orderby_fld 포함(row5가 row4 앞에 옴에 유의)
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0, '~')
 AS t(keyid 텍스트, parent_keyid 텍스트, 레벨 int, 분기 텍스트, pos int);
 키ID | 부모_키ID | 수준 |       지점 | 포스
------+---------------+-------+---------+-----
 행2 |              |     0 | 행2 |   1
 행 5 | 행2 |     1 | 2행~5행 |   2
 행9 | 행 5 |     2 | 행2~행5~행9 |   3
 행4 | 행2 |     1 | 2행~4행 |   4
 행 6 | 행4 |     2 | 행2~행4~행6 |   5
 행8 | 행 6 |     3 | 행2~행4~행6~8행 |   6
(6열)

-- 분기 없음, orderby_fld 사용(row5가 row4 앞에 옴에 유의)
SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'pos', 'row2', 0)
 AS t(keyid 텍스트, parent_keyid 텍스트, level int, pos int);
 키ID | 부모_키ID | 수준 | 포스
------+---------------+---------+-----
 행2 |              |     0 |   1
 행 5 | 행2 |     1 |   2
 행9 | 행 5 |     2 |   3
 행4 | 행2 |     1 |   4
 행 6 | 행4 |     2 |   5
 행8 | 행 6 |     3 |   6
(6행)

F.43.2. 작성자#

조 콘웨이

수정 사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.