안녕하세요, 김일형입니다.
저의 짧은 지식으로는 님께서 올리신 코드를 잘 이해하지 못하겠습니다. trigger같기도 하고 function 같기도 하고...
일단 님의 의도에 따라 님의 코드를 바꾼다면 아래와 같아 질 수 있을것입니다.
DROP FUNCTION ex_func(INT4);
CREATE FUNCTION ex_func(INT4) RETURNS ex AS '
DECLARE
number ALIAS FOR $1;
user_rec ex%ROWTYPE;
BEGIN
SELECT into user_rec * FROM ex WHERE num = number;
RETURN user_rec ;
END;
' LANGUAGE 'plpgsql';
여기서 반환값 ex는 님께서 말씀하신 구조의 table입니다.
그런데 불행히도 위의 예를 실행해 보면 원하는 값이 안나옵니다.
제가 처음에 PL/pgSQL 메뉴얼을 번역을 하면서 원했던 것이 바로 복잡한 요구를 처리후 하나의 레코드를 반환하는 것 이었습니다.
그런데, 재미있게도 어디에도 그런예가 없었습니다.
그래서 여기 저기 알아봤는데, 함수는 레코드 하나 전체를 밖으로 빼낼 수 없다였습니다.
이 함수에서 저 함수로 매개변수로 또는 반환값으로 하나의 레코드를 넘기거나 받을 수 있는데 반해 최종적으로 최초 퀴리 밖으로는 값을 얻어낼 수 없었습니다. (메뉴얼에도 그렇게....)
이것이 저의 지금까지 알아낸 것이구요. 좀더 자세한 것은 제가 올린 PL/pgSQL메류얼 번역 에서 오라클의 PL/SQL을 PL/pgSQL로 전환이라는 부분을 보시면 당시 이런 비슷한 상황에서 자신은어떻게 처리했다... 라는 것을 찾아보실 수 있을것입니다.
죄송합니다. 제 짧은 실력으로는 여기가 한계이군요...
김일형.
>>허잡..ㅠ.ㅠ 님께서 쓰시길<<
:: ex라는 테이블에 num, id, passwd라는 필드들이 있습니다.
::
:: 보통 function을 선언하고 정의할때 리턴되는 타입은 INT4, VARCHAR 등과
::
:: 같이 일반적으로 posgres에서 정해진 데이터타입 입니다. 제가 알고
::
:: 싶은 것은 위와 같은 테이블에서 num, id, passwd 모두를 리턴값으로
::
:: 받고 싶습니다.
::
:: CREATE FUNCTION ex(INT4) RETURNS OPAQUE AS '
:: BEGIN
:: SELECT num, id, passwd FROM ex WHERE num = $1;
:: RETURN NEW;
:: END;
:: ' LANGUAGE 'plpgsql';
::
:: 지금 제가 생각하기에는 이런 소스가 나오겠죠.. 근데..
::
:: 이렇게 사용하는 것이 과연 옳은 것인지.. 그리고 틀리다면
::
:: 어떻게 해야 제가 바라는 결론을 얻을 수 있는지여?
::
|