// 오라클 패키지 프로시저 선언
CREATE OR REPLACE PACKAGE SDK_RESULT_PKG
AS
TYPE REF_TYPE IS REF CURSOR;
PROCEDURE SDK_RESULT(
V_RESULT OUT SDK_RESULT_PKG.REF_TYPE,
MSG_TYPE IN VARCHAR2,
FROMDATE IN VARCHAR2,
TODATE IN VARCHAR2
);
END SDK_RESULT_PKG;
// 오라클 패키지 프로시저 구현
CREATE OR REPLACE PACKAGE BODY SDK_RESULT_PKG
AS
PROCEDURE SDK_RESULT(
V_RESULT OUT SDK_RESULT_PKG.REF_TYPE,
MSG_TYPE IN VARCHAR2,
FROMDATE IN VARCHAR2,
TODATE IN VARCHAR2
)
AS
SMS_SQL VARCHAR2(5000);
MMS_SQL VARCHAR2(5000);
VMS_SQL VARCHAR2(5000);
FMS_SQL VARCHAR2(5000);
SURVEY_SQL VARCHAR2(5000);
BEGIN
SMS_SQL := 'SELECT MSG, ';
SMS_SQL := SMS_SQL || ' USER_ID, ';
SMS_SQL := SMS_SQL || ' SEND_DATE, ';
SMS_SQL := SMS_SQL || ' 0 AS REPLY_TYPE, ';
SMS_SQL := SMS_SQL || ' SUM(DEST_COUNT) AS DEST_COUNT, ';
SMS_SQL := SMS_SQL || ' SUM(SUCC_COUNT) AS SUCC_COUNT, ';
SMS_SQL := SMS_SQL || ' SUM(FAIL_COUNT) AS FAIL_COUNT, ';
SMS_SQL := SMS_SQL || ' SUM((DEST_COUNT-SUCC_COUNT) FAIL_COUNT) AS ING_COUNT, ';
SMS_SQL := SMS_SQL || ' CALLBACK, ';
SMS_SQL := SMS_SQL || ' SUBSTR(XMLAGG(XMLELEMENT(AB,MSG_ID || ''^'') ORDER BY MSG_ID).EXTRACT(''//text()''),1) AS MSG_ID ';
SMS_SQL := SMS_SQL || ' FROM TBL';
SMS_SQL := SMS_SQL || ' GROUP BY SMS_MSG, USER_ID, SEND_DATE, CALLBACK, RESERVED5';
OPEN V_RESULT FOR SMS_SQL;
END SDK_RESULT;
END SDK_RESULT_PKG;
// 자바 실행
// 자바 실행
Connection Conn=null;
ResultSet Rs = null;
CallableStatement cstmt = null;
DBClassTEST DBClass = new DBClassTEST()
DBClass.DB_Info();
DBClass.Connect();
Conn = DBClass.Conn();
//**** DB 연결 부분은 알아서 구현 위 내용은 임시 클래스
Qry = "BEGIN SDK_RESULT_PKG.SDK_RESULT(?,?,?,?); END;";
cstmt = Conn.prepareCall(Qry);
cstmt.registerOutParameter(1,OracleTypes.CURSOR);
cstmt.setString(2,"SMS");
cstmt.setString(3,"200901010000");
cstmt.setString(4,"201012312359");
cstmt.execute();
Rs = ((OracleCallableStatement)cstmt).getCursor(1);
ColumnName="TEST"; //컬럼이름
while(Rs.next()){
System.out.println(Rs.getString(ColumnName));
}
Rs.close();
cstmt.close();
Conn.close();
DBClass.DB_Close();