PL / pgSQL에서 사용하는 변수에 쿼리 결과 저장
PostgreSQL의 절차 적 언어 인 PL / pgSQL의 변수에 쿼리 결과를 할당하는 방법은 무엇입니까?
나는 기능이있다 :
CREATE OR REPLACE FUNCTION test(x numeric)
RETURNS character varying AS
$BODY$
DECLARE
name character varying(255);
begin
name ='SELECT name FROM test_table where id='||x;
if(name='test')then
--do somthing
else
--do the else part
end if;
end;
return -- return my process result here
$BODY$
LANGUAGE plpgsql VOLATILE
위의 함수에서이 쿼리의 결과를 저장해야합니다.
'SELECT name FROM test_table where id='||x;
변수에 name
.
이것을 처리하는 방법?
나는 당신이 찾고 있다고 생각합니다 SELECT INTO
:
select test_table.name into name from test_table where id = x;
그러면 함수의 인수가 있는 위치 name
에서 가져 와서 변수에 그대로 둡니다 . 테이블 이름 접두사를 생략하지 마십시오. 그렇지 않으면 모호한 참조에 대한 불만이 표시됩니다.test_table
id
name
test_table.name
단일 변수를 할당하는 한 plpgsql 함수에서 일반 할당을 사용할 수도 있습니다.
name := (SELECT t.name from test_table t where t.id = x);
또는 이미 제공된 @muSELECT INTO
처럼 사용하십시오 .
이것도 작동합니다.
name := t.name from test_table t where t.id = x;
그러나 @Pavel이 언급했듯이 처음 두 가지 명확한 방법 중 하나를 사용하는 것이 좋습니다.
추가로 테이블 별칭으로 구문을 줄였습니다.
업데이트 : 내 코드 예제를 제거 하고 @Pavel에서 제공 한IF EXISTS()
것처럼 대신 사용 하는 것이 좋습니다 .
일반적인 패턴은 EXISTS(subselect)
다음과 같습니다.
BEGIN
IF EXISTS(SELECT name
FROM test_table t
WHERE t.id = x
AND t.name = 'test')
THEN
---
ELSE
---
END IF;
이 패턴은 PL / SQL, PL / pgSQL, SQL / PSM, ...에서 사용됩니다.
학습 테이블 생성 :
CREATE TABLE "public"."learning" (
"api_id" int4 DEFAULT nextval('share_api_api_id_seq'::regclass) NOT NULL,
"title" varchar(255) COLLATE "default"
);
데이터 학습 테이블 삽입 :
INSERT INTO "public"."learning" VALUES ('1', 'Google AI-01');
INSERT INTO "public"."learning" VALUES ('2', 'Google AI-02');
INSERT INTO "public"."learning" VALUES ('3', 'Google AI-01');
단계 : 01
CREATE OR REPLACE FUNCTION get_all (pattern VARCHAR) RETURNS TABLE (
learn_id INT,
learn_title VARCHAR
) AS $$
BEGIN
RETURN QUERY SELECT
api_id,
title
FROM
learning
WHERE
title = pattern ;
END ; $$ LANGUAGE 'plpgsql';
단계 : 02
SELECT * FROM get_all('Google AI-01');
단계 : 03
DROP FUNCTION get_all();
다음 예제를 사용하여 PL / pgSQL을 사용하여 변수에 쿼리 결과를 저장할 수 있습니다.
select * into demo from maintenanceactivitytrack ;
raise notice'p_maintenanceid:%',demo;
참고 URL : https://stackoverflow.com/questions/12328198/store-query-result-in-a-variable-using-in-pl-pgsql
'Programing' 카테고리의 다른 글
다른 모든 것이로드 될 때까지 jquery 스크립트 지연 (0) | 2020.08.14 |
---|---|
iPhone / iOS JSON 구문 분석 자습서 (0) | 2020.08.14 |
Rails 5 : ActiveRecord 또는 쿼리 (0) | 2020.08.14 |
Inno Setup for Windows 서비스? (0) | 2020.08.14 |
WebView 링크 클릭 기본 브라우저 열기 (0) | 2020.08.14 |