Background Image

FORUM

조회 수 382 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
Linux 64bit 등
CUBRID Ver.
10.1
CUBRID TOOL Ver.
10.1.0.0003 
응용 환경(API)
java

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
프로시져를 작성하였는데 궁금한 점 2가지 문의 드립니다.


=============== 테이블 스키마 ======================

CREATE TABLE [ta_seq] (

[bplc_cd] CHARACTER VARYING (11) NOT NULL COMMENT '사업소코드',

[biz_cd] CHARACTER VARYING (2) NOT NULL COMMENT '업무코드',

[seq] INTEGER COMMENT '순번',

CONSTRAINT [ta_seq_pk] PRIMARY KEY([biz_cd], [bplc_cd]),

CONSTRAINT [ta_seq_idx] UNIQUE KEY([biz_cd], [bplc_cd])

)

COLLATE euckr_bin

COMMENT = '순번';


===================== 프로시저 코드(JAVA) ========================


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;


public class Sproc {

public static void getIndex(String pBplCd, String pBizCd, Integer vnCount) throws Exception

{

Connection conn = null;

PreparedStatement pstmt = null;

vnCount = 0;

String sql = "";

try {

try {

Class.forName("cubrid.jdbc.driver.CUBRIDDriver");

} catch (ClassNotFoundException e) {

System.out.println("Driver Class Not Found");

}

conn = DriverManager.getConnection("jdbc:default:connection:");

vnCount = getIndexNumber(conn, pBplCd, pBizCd);

System.out.println("프로시저 리턴 결과 vnCount : " + vnCount);

if(vnCount == null)

{

throw new Exception("getIndexNumber value is null");

}

if(vnCount == 0)

{

System.out.println("==================== 조건 1 ========================");

sql = "INSERT INTO TA_SEQ(BPLC_CD, BIZ_CD, SEQ)VALUES(?, ?, ?)";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, pBplCd);

pstmt.setString(2, pBizCd);

pstmt.setInt(3, 1);

pstmt.executeUpdate();

}

else

{

System.out.println("==================== 조건 2 ========================");

sql = "UPDATE TA_SEQ SET SEQ = ? WHERE BPLC_CD = ? AND BIZ_CD = ?";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, pBplCd);

pstmt.setString(2, pBizCd);

pstmt.setInt(3, vnCount + 1);

pstmt.executeUpdate();

}

vnCount += 1;

System.out.println("==================== 최종결과 vnCount :  ========================" + vnCount);

pstmt.close();

conn.commit();

conn.close();

}catch(SQLException e) {

System.err.println(e.getMessage());

vnCount = null;

}finally {

if(pstmt != null)try {pstmt.close();}catch(SQLException ex) {}

if(conn != null)try {conn.close();}catch(SQLException ex) {}

}

}

public static Integer getIndexNumber(Connection conn, String pBplCd, String pBizCd)

{

System.out.println("============================== 호출  시작 ============================");

System.out.println("pBplCd : " + pBplCd);

System.out.println("pBizCd : " + pBizCd);

System.out.println("============================== 호출 종료 ============================");

PreparedStatement pstmt = null;

ResultSet rs = null;

Integer vnCount = 0;

String sql = "SELECT IFNULL(SEQ, 0) FROM TA_SEQ WHERE BPLC_CD = ? AND BIZ_CD = ?";

try {

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, pBplCd);

pstmt.setString(2, pBizCd);

rs = pstmt.executeQuery();

while(rs.next())

{

vnCount = rs.getInt("SEQ");

}

rs.close();

pstmt.close();

}catch(SQLException e) {

System.err.println(e.getMessage());

vnCount = null;

}finally {

if(rs != null)try {rs.close();}catch(SQLException ex) {}

if(pstmt != null)try {pstmt.close();}catch(SQLException ex) {}

}

return vnCount;

}

}


================================ 프로시저 등록 ================================

Sproc.java loadjava 를 이용하여 등록한 상태

CREATE PROCEDURE getIndex(p_bplc_cd IN varchar, p_biz_cd IN VARCHAR, p_seq OUT INTEGER) 

AS LANGUAGE JAVA NAME 'Sproc.getIndex(java.lang.String, java.lang.String, java.lang.Integer)';


============================= 호출 자바 샘플 ======================================



import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;


public class Test {


public static void main(String[] args) throws Exception{

String url = "jdbc:cubrid:192.168.195.100:33000:kioskdb:::?charSet=EUC-KR";

String userid = "kioskcub";

String password = "kioskcubpwd";

Class.forName("cubrid.jdbc.driver.CUBRIDDriver");

Connection conn = DriverManager.getConnection(url, userid, password);

CallableStatement ctmt;

ctmt = conn.prepareCall(" call getIndex(?, ?, ?)" ) ;

ctmt.setString(1, "MASTER");

ctmt.setString(2, "99");

ctmt.registerOutParameter(3, java.sql.Types.INTEGER);

ctmt.execute() ;

int cnt = ctmt.getInt(3);

System.out.println(cnt);

}


}


========================================== 실행결과 ============================


============================== 호출  시작 ============================

pBplCd : MASTER

pBizCd : 99

============================== 호출 종료 ============================

프로시저 리턴 결과 vnCount : 0

==================== 조건 1 ========================

==================== 최종결과 vnCount :  ========================1


제가 기대했던 결과는 TA_SEQ 테이블에 데이터가 없기 때문에 INSERT 가 되고 int cnt = ctmt.getInt(3); 가 1이 리턴되는걸 예상했는데 테이블에는 데이터가 

들어가지도 않고   int cnt = ctmt.getInt(3); 값은 계속 0 이 됩니다.

어디가 잘못되었는지 몰라서 문의 드립니다.


  • ?
    엄기호 2018.05.29 16:12
    sql_log 정보를 보시면 어떤 질의문이 에러가 났는지 알 수 있을 겁니다.
    sql_log 위치는 log/broker/sql_log에 있습니다.
    리눅스 임으로 cd명령어를 이용하여 sql_log 위치로 이동하여 파일을 열어서 확인 해보십시요..
    #>cd $CUBRID/log/broker/sql_log 엔터

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 110
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4473
3980 현재 이중화 진행중인 db 를 한쪽을 끊고 이관작업이후 이중화를 붙이면 동기화가 문제가 없나요? 1 coolkkm 2017.10.30 376
3979 현재 연결은 원격 호스트에 의해 강제로 끊겼습니다 1 바람바람 2013.05.29 84902
3978 현재 디비가 조회가 되지 않을정도로 느립니다. 1 file 시리 2019.01.17 247
3977 현재 구축 중인 사이트에 GROUP_CONCAT 쿼리 최적화 관련 문의드립니다 4 인혁 2020.10.21 756
3976 해시분할 문의 2 초보 2010.04.10 9983
3975 해당 ip에만 접속 권한을 주는 기능은 없나요? 1 얀들 2009.07.27 9085
3974 해당 SQL은 어떻게 수정하나요? 1 닥터히어로 2015.11.04 4379
3973 해결 부탁드립니다. 4 file GNS 2017.01.10 14524
3972 함수/프로시져 구동시 필요한 java버젼 1 네오랜덤 2023.03.31 124
3971 함수/프로시저 설정 문제 3 동훈이 2016.09.01 13925
3970 함수/저장프로시저 타입 오류 관련 문의합니다.(ado.net한글깨짐 포함 수정) 2 file 아이쿠두야 2014.01.01 12591
3969 함수 실행시 한글 깨짐 현상 4 대규 2011.10.05 11850
3968 함수 생성 문의 1 ozro 2022.06.13 189
3967 함수 생성 관련 문의 1 bnb0165 2021.10.12 81
3966 함수 사용시 한글 깨짐 현상 2 펌피 2016.06.28 10197
3965 함수 사용시 max, min 값 문의 4 kipo0821 2020.01.20 533
3964 함수 사용 에러 1 말큼 2016.03.31 9292
3963 함수 문의 1 amostella 2022.05.18 166
3962 함수 등록한 수 쿼리문에서 사용하면 에러나는데 뭐가 문제인거죠? 3 어려운큐브 2012.05.26 13893
3961 함수 값은 null 체크가 안되나요?? 1 ozro 2022.08.22 60
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 200 Next
/ 200

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales