0

postgres의 테이블에 값을 삽입하는 기능을 사용하고 있습니다. 동일한 기능으로 삽입/갱신/삭제 된 레코드를 검색 할 수 있습니까?postgres에서 동일한 기능으로 삽입/업데이트/삭제 된 레코드 검색

저는 postgres를 처음 사용 했으므로 누군가 안내하거나 설명 할 수 있다면 감사하겠습니다.

CREATE OR REPLACE FUNCTION SampleFunction (in name varchar, in descsciption varchar, in userid varchar) RETURNS void AS 
$BODY$ 
begin  
    insert into sampletable(id,categoryname,categorydesc,createdby) 
    values(default,name,descsciption,userid);   
end 
$BODY$ 
LANGUAGE 'plpgsql' 

답변

1

RETURNING 절을 사용

여기 내 샘플 기능입니다.

insert into sampletable(id,categoryname,categorydesc,createdby) 
values(default,name,descsciption,userid) 
returning * 

(테스트되지 않은) : 당신이 열 정의를 반복 할 필요가 없습니다

CREATE OR REPLACE FUNCTION SampleFunction (in name varchar, in descsciption varchar, in userid varchar) RETURNS SETOF sampletable AS 
$BODY$ 
begin  
    RETURN QUERY 
    insert into sampletable(id,categoryname,categorydesc,createdby) 
    values(default,name,descsciption,userid) 
    returning *; 
end 
$BODY$ 
LANGUAGE plpgsql; 

RETURNS SETOF sampletable의 사용, 테이블의 ROWTYPE를 반환합니다.

자세한 내용은 PL/PgSQL 설명서를 참조하십시오.

이 경우에는 PL/PgSQL이 전혀 필요하지 않습니다. 이 기능을 필요로하지 않는다고 주장하면 다음과 같이 쓸 수 있습니다.

CREATE OR REPLACE FUNCTION SampleFunction (name varchar, descsciption varchar, userid varchar) RETURNS SETOF sampletable AS 
$BODY$ 
    insert into sampletable(id,categoryname,categorydesc,createdby) 
    values(default,$1,$2,$3) 
    returning *; 
$BODY$ 
LANGUAGE sql; 
+0

반환 유형이어야하는 것은 무엇입니까? 반환 형식을 잘 변경해야 할 것 같아요? – user2438237

+0

오류가 발생했습니다 : 오류 : 결과 데이터에 대한 대상이 쿼리에 없습니다. – user2438237

+0

@ user2438237 함수에서 사용하는 경우 다른 모든 집합 반환 쿼리와 마찬가지로 대상을 제공해야합니다. 결과에 대해'RETURN QUERY INSERT .... RETURNING ...'또는'LOOP'를 사용하십시오.'SELECT '로 할 수있는 모든 일반적인 것들이 작동합니다. 결과를 반환하려면 'RETURNS TABLE'이 필요하거나'RETURNS SETOF RECORD '와 함께'OUT' 및'INOUT' 매개 변수를 사용해야합니다. –

관련 문제