RECORD 변수에 SELECT INTO를 사용했더니 되더군요. 답변 감사합니다~
>>김일형 님께서 쓰시길<<
:: 안녕하세요, 김일형입니다.
::
:: 제가 출근시간 전이라서 제 답변에 대한 검증은 못해봤는데요.... ^_^;;
::
:: 기본적으로 pl/pgsql에서는 그냥 select문을 쓸 수 없습니다.
:: 대신 Select into를 사용하죠.
:: 그래서 결과값을 어떤 변수에 넣는다는 개념입니다.
::
:: 아래의 예를 참고 바랍니다.
::
:: create function cs_refresh_one_mv(integer) returns integer as '
:: DECLARE
:: key ALIAS FOR $1;
:: table_data cs_materialized_views%ROWTYPE;
:: BEGIN
:: SELECT INTO table_data * FROM cs_materialized_views
:: WHERE sort_key=key;
::
:: IF NOT FOUND THEN
:: RAISE EXCEPTION ''View '' || key || '' not found'';
:: RETURN 0;
:: END IF;
::
:: // cs_materialized_views의 mv_name
:: // 칼럼은 view의 이름을 저장한다.
::
:: TRUNCATE TABLE table_data.mv_name;
:: INSERT INTO table_data.mv_name || '' '' || table_data.mv_query;
::
:: return 1;
:: end;
:: ' LANGUAGE 'plpgsql';
::
:: 일호님께서 올린 예하고 틀린 부분이 눈에 띄죠?
:: 그리고 좀더 자세한 것은 제가 PL/pgSQL 메뉴얼을 번역해 놓은 것이 있습니다.
:: 여기 초기화면 104번 공지사항을 보시면 링크 되어있으니 참고 바랍니다.
::
:: 김일형.
::
::
::
:: >>김일호 님께서 쓰시길<<
::
:: ::
:: :: 다음과 같은 문장을 작성했는데요 에러가 발생하는군요.
:: ::
:: :: DROP FUNCTION MakeHourStat();
:: :: CREATE FUNCTION MakeHourStat() RETURNS BOOLEAN AS '
:: :: BEGIN
:: :: Select * From PG_CLASS WHERE RELNAME = 'statistics';
:: :: IF NOT FOUND THEN
:: :: RAISE NOTICE ''결과가 없습니다'';
:: :: RETURN TRUE;
:: :: ELSE
:: :: RAISE NOTICE ''결과가 있습니다'';
:: :: RETURN FALSE;
:: :: END IF;
:: ::
:: :: END;
:: :: ' LANGUAGE 'plpgsql';
:: ::
:: :: 함수를 실행하면 (Select MakeHourStat();) 다음과 같은 에러가 발생합니다.
:: ::
:: :: ERROR: unexpected SELECT query in exec_stmt_execsql()
:: ::
:: :: 도대체 이유가 뭔지 모르겠습니다. T.T
:: ::
:: ::
|