관리 메뉴

nalaolla

프로시져 사용한 간단 우편번호 검색기 본문

ORACLE

프로시져 사용한 간단 우편번호 검색기

날아올라↗↗ 2016. 1. 7. 04:20
728x90


ZipCodeMain.java


  1. package test.com.zipcode;
  2.  
  3. import java.sql.CallableStatement;
  4. import java.sql.Connection;
  5. import java.sql.DriverManager;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8.  
  9. public class ZipCodeMain {
  10.  
  11.     public static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
  12.     public static final String URL = "jdbc:oracle:thin:@localhost:1521:javagroup";
  13.     public static final String USER_ID = "web_project";
  14.     public static final String USER_PWD = "hi123456";
  15.  
  16.     public Connection getConn() {
  17.         Connection con = null;
  18.  
  19.         try {
  20.             Class.forName(DRIVER_NAME);
  21.             con = DriverManager.getConnection(URL, USER_ID, USER_PWD);
  22.  
  23.         } catch (ClassNotFoundException e) {
  24.             // TODO Auto-generated catch block
  25.             e.printStackTrace();
  26.         } catch (SQLException e) {
  27.             // TODO Auto-generated catch block
  28.             e.printStackTrace();
  29.         }
  30.  
  31.         return con;
  32.     }
  33.  
  34.     public static void main(String[] args) {
  35.         // TODO Auto-generated method stub
  36.  
  37.         ZipCodeMain zm = new ZipCodeMain();
  38.  
  39.  
  40.         String addr_String = "동산동";
  41.  
  42.         Connection con = zm.getConn();
  43.         ResultSet rs = null;
  44.         CallableStatement statement = null;
  45.  
  46.         try {
  47.             String sql = "call UP_ZIPCODE_SEARCH(?, ?, ?)";
  48.             statement = con.prepareCall(sql);
  49.             statement.setString(1, addr_String);
  50.             statement.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
  51.             statement.registerOutParameter(3, oracle.jdbc.OracleTypes.NUMBER);
  52.             statement.execute();
  53.  
  54.             rs = (ResultSet) statement.getObject(2);
  55.  
  56.             while (rs.next()) {
  57.                 System.out.print(rs.getInt("zipcode") + " ");
  58.                 System.out.print(rs.getString("sido") + " ");
  59.                 System.out.print(rs.getString("sigungu") + " ");
  60.                 System.out.println(rs.getString("b_dong_name"));
  61.             }
  62.  
  63.             System.out.println("결과물수 : " + statement.getInt(3));
  64.  
  65.         } catch (SQLException e) {
  66.             // TODO Auto-generated catch block
  67.             e.printStackTrace();
  68.         }
  69.  
  70.     }
  71.  
  72. }


간단히 클래스하나에서 처리한다..

자료가 잘 넘어오는지 확인용으로...




오라클 패키지 생성


  1. CREATE OR REPLACE PACKAGE TYPES AS --> 패키지명은 "TYPES"
  2.   TYPE cursorType IS REF CURSOR;    --> 패키지에 생성된 커서타입 REF CURSOR
  3. END TYPES;



오라클 프로시져 생성

  1. CREATE OR REPLACE PROCEDURE UP_ZIPCODE_SEARCH (
  2.      PSEARCH_FIELD     IN VARCHAR2, --SEARCH FIELD
  3.      PLIST1       OUT  TYPES.CURSORTYPE, --> 첫째 select값을 PLIST1 커서에 담는다.
  4.      PLIST2     OUT  NUMBER --> 두번째 전체 count값을 PLIST2에 담는다.
  5. )
  6. AS
  7. BEGIN
  8. --=============================================================
  9. --LIST1
  10.  OPEN PLIST1 FOR    --> 커서를 오픈하고 ";"까지의 select값을 담는다.
  11.  SELECT zipcode, sido, sigungu, b_dong_name FROM ZIPCODE_NEW WHERE B_DONG_NAME LIKE '%'||PSEARCH_FIELD||'%' AND ROWNUM < 10;
  12. --=============================================================
  13. --LIST2
  14.  SELECT count(zipcode) INTO PLIST2 FROM ZIPCODE_NEW WHERE B_DONG_NAME LIKE '%'||PSEARCH_FIELD||'%' AND ROWNUM < 10;
  15. --=============================================================
  16. END UP_ZIPCODE_SEARCH;

간략하게 작성했지만..
실적용시에는 page count와 list count등을 전달받아 paging처리가 이루어져야 한다...
그건 나중에..^^



728x90