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
운영게시판
최근게시물
Oracle Q&A 28045 게시물 읽기
No. 28045
프로시져에러
작성자
이분희
작성일
2006-09-25 18:54
조회수
1,805

CREATE OR REPLACE PROCEDURE proc_today_dut (
   dut_cur      OUT   pack_today_dut.p_dut_cur,
   i_dut_date   IN       VARCHAR,
   i_dept_code  IN       VARCHAR
)
IS

v_dut_org_code VARCHAR(11); -- 변수선언

BEGIN

   -- 기관코드 가져온다
   SELECT dut_org_code into v_dut_org_code from SLFANDUTORGDEPT
   WHERE dept_code = i_dept_code;
 
   OPEN dut_cur
   FOR
            SELECT d.dept_nm, b.nm, dut_gbn
   FROM slfandutord a, cmmanuser b, cmmandptmnt d, slfandutpst f
   WHERE b.dep_code = d.dept_code(+)
   AND   decode((select y.code_ctn                             
      from icuanapvstat x, cmmandcode y                        
      where y.code_id = 'ICU010'                   
      and x.apv_state_code =y.code          
      and x.tbl_nm = 'SLFANDUTORD'           
      and a.apv_no = x.apv_doc_vlu), '완료', a.dut_wrk_sid, null, a.dut_wrk_sid, a.old_sid)=b.usr_id(+)
   AND a.dut_date = i_dut_date
   AND a.dut_posit = f.dut_pst_code
   AND a.ord_gubun = 'Y'
   AND a.dut_org_code = f.dut_org_code
   AND a.dut_org_code = v_dut_org_code
   ORDER BY a.dut_date DESC, a.dut_gbn, a.dut_posit, b.usr_order;

END proc_today_dut;
/


프로시져입니다.

v_dut_org_code 를 변수선언하여,

첫번째 select 문에서 기관코드를 얻어와서 
두번째 select 문에 조건절로 넣어줍니다.

문제는, 첫번째 select 문에서 데이터가 없을경우입니다.

jsp에서 프로시져호출을 하는데, 404 에러가 나타납니다.

    String arrRtnName = "";

     String arrRtnDept = "";

     String arrRtnResult = "";

     String[] retArr = null;

     String[] retArrDept = null;

     String[] retArrName = null;

     String[] retArrDutDay = null;


cstmt = conn.prepareCall("{call PACK_TODAY_DUT.proc_today_dut(?, ?, ?)}");

 
cstmt.registerOutParameter(1, OracleTypes.CURSOR);

 cstmt.setString(2, strCurrDate);

 cstmt.setString(3, strDeptId);

 cstmt.execute();

 

 rs = (ResultSet)cstmt.getObject(1);  

 

 Vector v = new Vector();

 Vector v2 = new Vector();

 Vector v3 = new Vector();

 Vector v4 = new Vector();

 

 while(rs.next()){

  arrRtnDept = rs.getString(1);

  arrRtnName = rs.getString(2);

  strDutGbn  = rs.getString(3);

  arrRtnResult = arrRtnName+"("+arrRtnDept+")";

  v.addElement( arrRtnResult );  

  v2.addElement( arrRtnDept );  

  v3.addElement( arrRtnName );  

  v4.addElement( strDutGbn );

 }

 retArr = new String[v.size()];

 retArrDept = new String[v2.size()];

 retArrName = new String[v3.size()];

 retArrDutDay = new String[v4.size()];

 v.copyInto( retArr );

 v2.copyInto( retArrDept );

 v3.copyInto( retArrName );

 v4.copyInto( retArrDutDay );

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

값이 없다면 no_Data_found입니다.
프로시져 내에서 예외처리 해주시고 
값이 없을때에는 밑에꺼 쿼리 실행을 안하던가
해야 할것 같은데.
begin
end
로 블럭을 만들면
그 사이에서 exception으로 예외처리가 가능합니다.
begin

값 있을 때 처리
exception

when no_data_found then
값없을때 처리
end

돈세자님이 2006-09-25 22:57에 작성한 댓글입니다.
이 댓글은 2006-09-25 22:58에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
28048PreparedStatement 와 stmt 차이 [1]
펭귄도사
2006-09-25
945
28047Trigger 실행 시점에 대한.. [1]
궁굼이
2006-09-25
1518
28046마농님..........(고수님들)
펭귄도사
2006-09-25
717
28045프로시져에러 [1]
이분희
2006-09-25
1805
28044테이블에서 중복된 것만 뽑아오는 쿼리.. [1]
kirrie
2006-09-25
2522
28042이것좀 알려주세여...... [4]
펭귄도사
2006-09-25
1586
28041alert로그에 기록된 에러입니다. [1]
박기환
2006-09-25
1318
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다