복붙노트

[SQL] 단일 매개 변수에 여러 값 전달

SQL

단일 매개 변수에 여러 값 전달

나는 다음과 같이 단일 매개 변수에 여러 값을 전달하여 함수를 호출 할 :

SELECT * FROM jobTitle('270,378');

여기 내 기능입니다.

CREATE OR REPLACE FUNCTION test(int)
RETURNS TABLE (job_id int, job_reference int, job_job_title text
                                            , job_status text) AS
$$
BEGIN
RETURN QUERY
select jobs.id,jobs.reference, jobs.job_title,
       ltrim(substring(jobs.status,3,char_length(jobs.status))) as status
FROM jobs ,company c
WHERE jobs."DeleteFlag" = '0'
and c.id= jobs.id and c.DeleteFlag = '0' and c.active = '1' 
and (jobs.id = $1 or -1 = $1)
order by jobs.job_title;
END;
$$ LANGUAGE plpgsql;

구문을 캔 사람의 도움? 심지어 샘플 코드를 제공?

해결법

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

    1.@mu 이미 제공 마찬가지로, VARIADIC은 당신의 친구입니다. 또 하나 개의 중요한 세부 사항 :

    @mu 이미 제공 마찬가지로, VARIADIC은 당신의 친구입니다. 또 하나 개의 중요한 세부 사항 :

    당신은 직접 배열 유형과 가변 인자 매개 변수를 사용하여 함수를 호출 할 수 있습니다. 함수 호출에 키 워드 VARIADIC 추가 :

    SELECT * FROM  f_test(VARIADIC '{1,2,3}'::int[]);

    상당에인가 :

    SELECT * FROM  f_test(1,2,3);
    

    이 풋 함께 모든, 함수는 다음과 같이 수 :

    CREATE OR REPLACE FUNCTION f_test(VARIADIC int[])
      RETURNS TABLE (id int, reference int, job_title text, status text) AS
    $func$
    
    SELECT j.id, j.reference, j.job_title
          ,ltrim(right(j.status, -2)) AS status
    FROM   company c
    JOIN   job     j USING (id)
    WHERE  c.active
    AND    NOT c.delete_flag
    AND    NOT j.delete_flag
    AND   (j.id = ANY($1) OR '{-1}'::int[] = $1)
    ORDER  BY j.job_title
    
    $func$ LANGUAGE sql;
    

    SQL 휘티 d 혀라도

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

    2.를 CSV 문자열로 정수의 목록을 변환처럼 이상하고 끔찍한 일을하지 마십시오,이 :

    를 CSV 문자열로 정수의 목록을 변환처럼 이상하고 끔찍한 일을하지 마십시오,이 :

    jobTitle('270,378')
    

    당신이 원하는 없습니다. 이 같은 일을하고 싶은 말 :

    jobTitle(270, 378)
    jobTitle(array[270, 378])
    

    당신이 손으로 jobTitle를 호출 할 거라면 다음 가변 기능은 아마와 함께 작동하도록 쉬운 것입니다 :

    create or replace function jobTitle(variadic int[])
    returns table (...) as $$
        -- $1 will be an array if integers in here so UNNEST, IN, ANY, ... as needed
    

    그럼 당신은 jobTitle (6), jobTitle (6, 11), jobTitle (6, 11, 23, 42), ... 필요로 할 수있다.

    당신은 다음 SQL의 jobTitle 인수를 구축 할려고하는 경우 명시 적 배열 버전은 아마와 작업에보다 쉽게 ​​될 것이다 :

    create or replace function jobTitle(int[])
    returns table (...) as $$
        -- $1 will be an array if integers in here so UNNEST, IN, ANY, ... as needed
    

    그런 다음 수 jobTitle (배열 [6]), jobTitle (배열 [6, 11]), ... 필요하고 당신이 jobTitle에 대한 빌드 인수 목록에 모든 일반적인 배열 연산자와 함수를 사용할 수있다.

    나는 독자들에게 연습으로 함수의 내부를 떠날거야.

  3. from https://stackoverflow.com/questions/19202832/pass-multiple-values-in-single-parameter by cc-by-sa and MIT license