database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 7375 게시물 읽기
No. 7375
프로시져에서 사용되는 변수인데 에러가 납니다.
작성자
Joo(wwol95)
작성일
2008-03-17 19:04
조회수
6,135

하단의 굵은 글씨 부분은 프로시져 내에서 변수로만 사용할려고 하는 것인데

에러 메세지를 띄우는 군요

"ERROR: query has no destination for result data;"

제가 받고 싶은 레코드는 " FOR rec IN "로 시작하는 부분만 인데 

굵은 글씨까지 리턴 받는 것으로 인식을 하는 것 같습니다. 굵은 글씨 지우면 잘 되지만 하고 싶은 것은 굵은 글씨를 변수로 사용하여 

쿼리를 동적으로 만들고 싶은 것이거든요

where 절 또는 필드에 첨가 하려고 하는데요 어떻게 프로시져 내에서 사용하는 변수를 선언해서 쓰는지 알고 싶습니다.

전에 ms-sql 은 그냥 in out으로 했던거 같은데.. 

감사합니다.....................

CREATE OR REPLACE FUNCTION rit_work.usp_s_work_result_day(start_day character varying, end_day character varying)
  RETURNS SETOF record AS
$BODY$

DECLARE rec record;

 DECLARE late_sec integer;
 DECLARE early_sec integer;
 DECLARE option_1 integer;
 DECLARE option_2 integer;

BEGIN


 SELECT late_sec = env_late_sec, early_sec = env_early_sec, option_1 = env_option_1, option_2 = env_option_2
 from rit_work.environment
 order by env_idx desc
 limit 1;

 FOR rec IN
  select a.wus_day, a.wus_user_id, b.user_name, b.dc_code
  , case  when length(b.dc_code) = 0 then
   ''
   else
    c.dc_name
  end
  , a.wus_wc_code
  , case  when length(a.wus_wc_code) = 0 then
    ''
   else
    d.wc_name
  end
  , case  when length(a.wus_wc_code) = 0 then
    ''
   else
    d.wc_type
  end
  , case  when length(a.wus_wc_start) = 0 or  length(a.wus_attend) = 0  then 
    '--:--'
   when a.wus_wc_start <= a.wus_attend then
    substring(
     ( (substring(a.wus_attend, 1, 4) || '-' || substring(a.wus_attend, 5, 2)
     || '-' || substring(a.wus_attend, 7, 2) || ' ' || substring(a.wus_attend, 9, 2)
     || ':' || substring(a.wus_attend, 11, 2) || ':' || substring(a.wus_attend, 13, 2))::timestamp with time zone
     -
     (substring(a.wus_wc_start, 1, 4) || '-' || substring(a.wus_wc_start, 5, 2)
     || '-' || substring(a.wus_wc_start, 7, 2) || ' ' || substring(a.wus_wc_start, 9, 2)
     || ':' || substring(a.wus_wc_start, 11, 2) || ':' || substring(a.wus_wc_start, 13, 2))::timestamp with time zone )
     , 1, 2)
     || ':' ||
    substring(
     ( (substring(a.wus_wc_start, 1, 4) || '-' || substring(a.wus_wc_start, 5, 2)
     || '-' || substring(a.wus_wc_start, 7, 2) || ' ' || substring(a.wus_wc_start, 9, 2)
     || ':' || substring(a.wus_wc_start, 11, 2) || ':' || substring(a.wus_wc_start, 13, 2))::timestamp with time zone
     -
     (substring(a.wus_attend, 1, 4) || '-' || substring(a.wus_attend, 5, 2)
     || '-' || substring(a.wus_attend, 7, 2) || ' ' || substring(a.wus_attend, 9, 2)
     || ':' || substring(a.wus_attend, 11, 2) || ':' || substring(a.wus_attend, 13, 2))::timestamp with time zone )
     , 4, 2)
   else
    '--:--'
  end as t1
  , case  when length(a.wus_wc_end) = 0 or  length(a.wus_leave) = 0  then '--:--'
   when a.wus_wc_end > a.wus_leave then
    substring(
     ( (substring(a.wus_wc_end, 1, 4) || '-' || substring(a.wus_wc_end, 5, 2)
     || '-' || substring(a.wus_wc_end, 7, 2) || ' ' || substring(a.wus_wc_end, 9, 2)
     || ':' || substring(a.wus_wc_end, 11, 2) || ':' || substring(a.wus_wc_end, 13, 2))::timestamp with time zone
     -
     (substring(a.wus_leave, 1, 4) || '-' || substring(a.wus_leave, 5, 2)
     || '-' || substring(a.wus_leave, 7, 2) || ' ' || substring(a.wus_leave, 9, 2)
     || ':' || substring(a.wus_leave, 11, 2) || ':' || substring(a.wus_leave, 13, 2))::timestamp with time zone )
     , 1, 2)
     || ':' ||
    substring(
     ( (substring(a.wus_wc_end, 1, 4) || '-' || substring(a.wus_wc_end, 5, 2)
     || '-' || substring(a.wus_wc_end, 7, 2) || ' ' || substring(a.wus_wc_end, 9, 2)
     || ':' || substring(a.wus_wc_end, 11, 2) || ':' || substring(a.wus_wc_end, 13, 2))::timestamp with time zone
     -
     (substring(a.wus_leave, 1, 4) || '-' || substring(a.wus_leave, 5, 2)
     || '-' || substring(a.wus_leave, 7, 2) || ' ' || substring(a.wus_leave, 9, 2)
     || ':' || substring(a.wus_leave, 11, 2) || ':' || substring(a.wus_leave, 13, 2))::timestamp with time zone )
     , 4, 2)
   else
    '--:--'
  end as t2
  , case  when length(a.wus_wc_start) = 0 or  length(a.wus_attend) = 0  then '--:--'
   when a.wus_wc_start > a.wus_attend then
    substring(
     ( (substring(a.wus_wc_start, 1, 4) || '-' || substring(a.wus_wc_start, 5, 2)
     || '-' || substring(a.wus_wc_start, 7, 2) || ' ' || substring(a.wus_wc_start, 9, 2)
     || ':' || substring(a.wus_wc_start, 11, 2) || ':' || substring(a.wus_wc_start, 13, 2))::timestamp with time zone
     -
     (substring(a.wus_attend, 1, 4) || '-' || substring(a.wus_attend, 5, 2)
     || '-' || substring(a.wus_attend, 7, 2) || ' ' || substring(a.wus_attend, 9, 2)
     || ':' || substring(a.wus_attend, 11, 2) || ':' || substring(a.wus_attend, 13, 2))::timestamp with time zone )
     , 1, 2)
     || ':' ||
      substring(
     ( (substring(a.wus_wc_start, 1, 4) || '-' || substring(a.wus_wc_start, 5, 2)
     || '-' || substring(a.wus_wc_start, 7, 2) || ' ' || substring(a.wus_wc_start, 9, 2)
     || ':' || substring(a.wus_wc_start, 11, 2) || ':' || substring(a.wus_wc_start, 13, 2))::timestamp with time zone
     -
     (substring(a.wus_attend, 1, 4) || '-' || substring(a.wus_attend, 5, 2)
     || '-' || substring(a.wus_attend, 7, 2) || ' ' || substring(a.wus_attend, 9, 2)
     || ':' || substring(a.wus_attend, 11, 2) || ':' || substring(a.wus_attend, 13, 2))::timestamp with time zone )
     , 4, 2)
   else
    '--:--'
  end as t3
  , case  when length(a.wus_wc_end) = 0 or  length(a.wus_leave) = 0  then '--:--'
   when a.wus_wc_end <= a.wus_leave then
    substring(
     ( (substring(a.wus_leave, 1, 4) || '-' || substring(a.wus_leave, 5, 2)
     || '-' || substring(a.wus_leave, 7, 2) || ' ' || substring(a.wus_leave, 9, 2)
     || ':' || substring(a.wus_leave, 11, 2) || ':' || substring(a.wus_leave, 13, 2))::timestamp with time zone
     -
     (substring(a.wus_wc_end, 1, 4) || '-' || substring(a.wus_wc_end, 5, 2)
     || '-' || substring(a.wus_wc_end, 7, 2) || ' ' || substring(a.wus_wc_end, 9, 2)
     || ':' || substring(a.wus_wc_end, 11, 2) || ':' || substring(a.wus_wc_end, 13, 2))::timestamp with time zone )
     , 1, 2)
     || ':' ||
    substring(
     ( (substring(a.wus_leave, 1, 4) || '-' || substring(a.wus_leave, 5, 2)
     || '-' || substring(a.wus_leave, 7, 2) || ' ' || substring(a.wus_leave, 9, 2)
     || ':' || substring(a.wus_leave, 11, 2) || ':' || substring(a.wus_leave, 13, 2))::timestamp with time zone
     -
     (substring(a.wus_wc_end, 1, 4) || '-' || substring(a.wus_wc_end, 5, 2)
     || '-' || substring(a.wus_wc_end, 7, 2) || ' ' || substring(a.wus_wc_end, 9, 2)
     || ':' || substring(a.wus_wc_end, 11, 2) || ':' || substring(a.wus_wc_end, 13, 2))::timestamp with time zone )
     , 4, 2)
   else
    '--:--'
  end as t4
  ,
  case  
   when length(a.wus_attend) = 0 then
    '--:--'
   when length(a.wus_attend) = 14 then
    substring(a.wus_attend, 9, 2) || ':' || substring(a.wus_attend, 11, 2)
  end as attend_time
  ,
  case  
   when length(a.wus_leave) = 0 then
    '--:--'
   when length(a.wus_leave) = 14 then
    substring(a.wus_leave, 9, 2) || ':' || substring(a.wus_leave, 11, 2)
  end as leave_time
  , a.wus_attend, a.wus_leave
  , a.wus_wc_start, a.wus_wc_end
  , a.wus_wc_ss, a.wus_wc_se, a.wus_wc_es, a.wus_wc_ee
  from rit_work.work_user_schedule a left join rit_work.user b on a.wus_user_id = b.user_id
  left join rit_work.depart_code c on b.dc_code = c.dc_code
  left join rit_work.work_code d on a.wus_wc_code = d.wc_code
  where a.wus_day between $1 and $2
  order by a.wus_day, b.user_name asc
 LOOP
  RETURN NEXT rec;
 END LOOP;
 RETURN;
END

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION rit_work.usp_s_work_result_day(start_day character varying, end_day character varying) OWNER TO postgres;
COMMENT ON FUNCTION rit_work.usp_s_work_result_day(start_day character varying, end_day character varying) IS 'comment';

이 글에 대한 댓글이 총 2건 있습니다.

쿼리 결과를 변수로 입력 받는 방법은 
into 구문입니다 

declare envrow record;
.....

begin
SELECT into envrow env_late_sec, env_early_sec, env_option_1, env_option_2
 from rit_work.environment
 order by env_idx desc
 limit 1;

envrow.env_late_sec;
envrow.env_early_sec;
....

이런식으로 사용합니다. 

김상기(ioseph)님이 2008-03-18 09:56에 작성한 댓글입니다.

select col1, col2, col3, .... into rec from table;

이런 형태는 알고있지만...


select into rec col1, col2, col3, ... from table 도 되나 보군요..

tyro님이 2008-03-18 20:30에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7381union 사용시 table명 출력 [2]
초짜군
2008-03-20
6161
7379인코딩 및 트리거 질문입니다. [1]
김대헌
2008-03-18
6163
7378프로시져에서 입력 받은 인자로 in 검색하기 [4]
Joo
2008-03-18
6021
7375프로시져에서 사용되는 변수인데 에러가 납니다. [2]
Joo
2008-03-17
6135
7374char 형 datetime형으로 변환하기 [2]
Joo
2008-03-14
6545
7373int2vector 변환 [1]
박상철
2008-03-13
5859
7372function 에서 trace 나 로그를 남기는 방법을 좀... [1]
김성국
2008-03-13
5792
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다