[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.@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.를 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에 대한 빌드 인수 목록에 모든 일반적인 배열 연산자와 함수를 사용할 수있다.
나는 독자들에게 연습으로 함수의 내부를 떠날거야.
from https://stackoverflow.com/questions/19202832/pass-multiple-values-in-single-parameter by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] INSERT INTO 또는 두 개의 조건 UPDATE (0) | 2020.04.12 |
---|---|
[SQL] 쿼리 3 개 테이블 "NOT IN"MySQL은 (0) | 2020.04.12 |
[SQL] 주어진 문자열을 분할 및 사례 문을 준비 (0) | 2020.04.12 |
[SQL] 같은 SELECT SQL 쿼리에서 SUM ()에서 계산 비율 (0) | 2020.04.12 |
[SQL] SQL 서버 날짜 형식 기능 (0) | 2020.04.12 |