프로시저 파라메터값 전환 방법 부탁드려요~~ 0 6 1,458

by 현씨 [2013.09.10 18:30:46]


안녕하세요. 자바에서 오라클 DB 접속하여 값을 가져와서 시스템에 결과 값을 뿌려주는 조회 프로시져를 만들었는데요~
처음에는 시스템에 뿌려줄 값을 변수로 out 선언을 해서 하다가
별차이가 없어서 밑에 프로시져로 수정하였거든요

밑에 프로시져는 그냥 결과값이 쭉 나오는 형태로 바꾸었는데요

다른시스템이 가져갈때는 결과값이 어떤 변수인가를 알아야지 항목별로 가져갈것 같은데
프로시져를 처음 짜봐서요
어떻게 해야되는건지 잘 모르겠어서요~
혹시 설명이 부족하지는 않나 모르겠습니다.
아무쪼록 파라미터 값을 잘 넘길 수 있는 방법을 알려주세요~

부탁드려요~~

PROCEDURE ORDER_QUERY

  (
    LOCAL     in   varchar2,    --사업장
   P_AGENT     in   varchar2, --주문처
    ORDER_DATE_START in   varchar2,    --주문일자
    ORDER_DATE_END    in   varchar2,    --주문일자
    P_PART_NO   in   varchar2   --품번

  -- V_ORDER_SEQ   out  varchar2,    --주문순번
    --V_ORDER_DATE out  date,     --주문일자
    -- V_QTY     out  number,   --품목합계
   -- V_AMT     out  number   --합계금액
   -- RES_CD   out  number   --메시지구분("Y": OK, "N": NOK)
    --RES_MSG out  varchar2 --메시지
   )
IS

 --V_ORDER_SEQ    varchar2(5);    --주문순번
 --V_ORDER_DATE     date;   --주문일자
 --V_QTY   number(10); --품목합계
 --V_AMT   number(13);    --합계금액


BEGIN


BEGIN
  FOR  cur IN (
     select   yymm||'-'||seq seq, ORDER_DATE,count(part_no) cont, sum(order_amt) amt
  from as_part_order
   where    busi_dept = local
   and   agent = rpad(agent,7,' ')
   and   del_gu != 'Y'
  and   yymm = substr(ORDER_DATE_START,1,6)
and   ORDER_DATE between to_date(ORDER_DATE_START,'yyyymmdd') and to_date(ORDER_DATE_END,'yyyymmdd')
  and part_no like '%'||rpad(P_PART_NO,12,' ')
  group by yymm||'-'||seq, ORDER_DATE

   ) LOOP

    --V_ORDER_SEQ    := cur.seq;
    --V_ORDER_DATE    := cur.ORDER_DATE;
    --V_QTY := cur.cont;
--V_AMT := cur.amt;


DBMS_OUTPUT.PUT_LINE(cur.seq);
DBMS_OUTPUT.PUT_LINE(cur.ORDER_DATE);
DBMS_OUTPUT.PUT_LINE(cur.cont);
DBMS_OUTPUT.PUT_LINE(cur.amt);
end loop;

EXCEPTION
   when others then
    -- RES_CD  := 'N';
    -- RES_MSG   := '주문 검색오류';
  return;
  END;

 -- RES_CD    := 'Y';
 -- RES_MSG := '';


END ORDER_QUERY;

by 부쉬맨 [2013.09.11 09:50:57]
이게 단순 결과값의 출력용으로 하여서 저런형태로 변경했는데
다른데서 가져가기위한 값으로 쓴다면 잘못만드셨습니다.

out 파라미터의 값으로 변수를 저장하여야지만 가져갈수있습니다.

결론은
현재 만드신건 결과메시지를 출력용으로는 손색이없는데
프로시저를 호출하여 다른 활당된 변수값을 사용하여 사용하기에는 빈껍데기입니다.

by 현씨 [2013.09.11 11:48:54]

네 그래서 그 방법을 여쭤보려구여~
out 변수값을 지정해주고
DBMS_OUTPUT.PUT_LINE(cur.seq);
DBMS_OUTPUT.PUT_LINE(cur.ORDER_DATE);
DBMS_OUTPUT.PUT_LINE(cur.cont);
DBMS_OUTPUT.PUT_LINE(cur.amt);


이부분에 커서값이 아닐 out변수명 을 대신 넣으면 되나여??

by 부쉬맨 [2013.09.11 13:11:43]
주석막힌부분 푸시고 
아웃변수명 넣으시면됩니다.

by 현씨 [2013.09.12 09:16:17]

네 그렇게 했거든여
근데 toad에서 test 해보았을때
데이터가 멀티로 나와야 되는데
loop문에 마지막 데이터만 나오거든여~

원래 제대로 나오는건데 결과값만 그렇게 나오는 건가여 아님
멀티로 여러 데이터가 나오려면 소스를 수정해야 되나여

by 부쉬맨 [2013.09.12 10:11:18]
loop 문안에 넣으세요 
http://www.gurubee.net/lecture/1056

by 현씨 [2013.09.17 10:48:07]

죄송한데여~
강좌에서처럼 pl/sql 테이블 선언해서
변수값에다가 값저장하는 형식으로 해야

멀티데이터 조회 프로시져가 제대로 작동하나여??

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입