* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
리눅스64비트 |
|
11 |
|
sqlgate |
|
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
select
reg_no, rank_no,
GET_CG_WON_SML_RN(reg_no, rank_no) as GET_CG_WON_SML_RN,
GET_CD_NM('CG_DM',reg_o_cd) as CG_DM_GET_CD_NM,
GET_CD_NM('G',lnd_r) as G_GET_CD_NM,
GET_CG_RD_SITE_NMS(reg_no, rank_no) as GET_CG_RD_SITE_NMS,
GET_CG_SITE_CHGYN(reg_no, rank_no) as GET_CG_SITE_CHGYN,
GET_CG_MK_CHGYN(reg_no, rank_no)as GET_CG_MK_CHGYN,
GET_CG_DUP_MINE_CHGYN(reg_no, rank_no) as GET_CG_DUP_MINE_CHGYN,
GET_CG_WON_MK_NMS(reg_no, rank_no) as GET_CG_WON_MK_NMS,
GET_CG_RD_WON_MK_NMS(reg_no, rank_no) as GET_CG_RD_WON_MK_NMS,
GET_CG_DUPMINEH_RN(reg_no, rank_no) as GET_CG_DUPMINEH_RN,
GET_CG_RD_DUPMINEH_RN(reg_no, rank_no) as GET_CG_RD_DUPMINEH_RN
from won_his
where reg_no='000125'
-> 에러발생
하나를 지우면 정상 실행
함수 메서드
public static String GET_CD_NM(String p1, String p2){
String str = "";
PreparedStatement ps;
ResultSet rs;
String sql = "SELECT CDNM FROM UNICODE "+
"WHERE GCD = ? AND CD = ?";
try {
ps = getConnection("dbo2","dbo2").prepareStatement(sql);
ps.setString(1, p1);
ps.setString(2, p2);
rs = ps.executeQuery();
while(rs.next()){
str = rs.getString("cdnm");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("GET_CD_NM:::str:::"+str);
return str;
}
에러메세지
Error : [-889] Stored procedure execute error: java.lang.NullPointerException
[CAS INFO-58.149.174.155:33000,3,4043].
그리고, select list에 많은 javasp 사용은 호출되는 javasp 수만큼 외부 java class를 수행해야 해서 성능상 좋지 않습니다.
올려주신 javasp 프로그램 같이 질의를 사용하는 경우에는 scalar subquery를 사용하시는 것이 성능상으로 좋습니다.
다음은 GET_CD_NM() 함수 scalar subquery로 사용하는 예입니다.
select
reg_no, rank_no,
..
(select cdmn from unicode where GCD = 'CG_DM' and cd = reg_o_cd limit 1) as get_cd_nm,
...
from won_his
where reg_no='000125';