Programing

PL / pgSQL에서 사용하는 변수에 쿼리 결과 저장

lottogame 2020. 8. 14. 08:13
반응형

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_tableidnametest_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

반응형