복붙노트

[SQL] 포스트 그레스 기능에 대한 사용자 정의 유형의 배열을 전달하는 방법

SQL

포스트 그레스 기능에 대한 사용자 정의 유형의 배열을 전달하는 방법

나는 사용자 정의 유형이

CREATE TYPE mytype as (id uuid, amount numeric(13,4));

나는 다음과 같은 서명 함수에 전달하려면 :

CREATE FUNCTION myschema.myfunction(id uuid, mytypes mytype[])
  RETURNS BOOLEAN AS...

어떻게 포스트 그레스 쿼리에 필연적으로 PHP에서 이것을 호출 할 수 있습니다?

해결법

  1. ==============================

    1.당신은 포스트 그레스 구조 함수처럼 당신이 값을 전달해야 할 때 문제가 발생할 수 있습니다 대신에 배열 생성자의 문자열 리터럴로 대체 구문을 사용할 수 있습니다 - 준비된 문에서 같은 :

    당신은 포스트 그레스 구조 함수처럼 당신이 값을 전달해야 할 때 문제가 발생할 수 있습니다 대신에 배열 생성자의 문자열 리터럴로 대체 구문을 사용할 수 있습니다 - 준비된 문에서 같은 :

    SELECT myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
                      , '{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee, 25)"
                        , "(6449fb3b-844e-440e-8973-31eb6bbefc81, 10)"}'::mytype[]);
    

    여기 디스플레이 배열의 2 개 개의 행 유형 간의 줄 바꿈을 첨가. 즉 법률입니다.

    여기 데모입니다 :

    CREATE TEMP TABLE mytype (id uuid, amount numeric(13,4));
    
    INSERT INTO mytype VALUES
      ('0d6311cc-0d74-4a32-8cf9-87835651e1ee', 25)
     ,('6449fb3b-844e-440e-8973-31eb6bbefc81', 10);
    
    SELECT ARRAY(SELECT m FROM mytype m);
    

    보고:

    {"(0d6311cc-0d74-4a32-8cf9-87835651e1ee,25.0000)","(6449fb3b-844e-440e-8973-31eb6bbefc81,10.0000)"}
    

    (임시 테이블 포함) 테이블이 암시 적으로 동일한 이름의 행의 형태를 만들어 주목해야한다.

  2. ==============================

    2.

    select myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
                    , ARRAY[('ac747f0e-93d4-43a9-bc5b-09df06593239', '25.00')
                                  , ('6449fb3b-844e-440e-8973-31eb6bbefc81', '10.00')]::mytype[]
        );
    

    그럼에도 불구하고 아직 확실하지 호출하는 방법을 함수 사용자 정의 배열 매개 변수로 채워하지만 해결이의 PHP 부분이 필요합니다.

  3. from https://stackoverflow.com/questions/12009822/how-to-pass-custom-type-array-to-postgres-function by cc-by-sa and MIT license