Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register


0
(click on this box to dismiss)

함수/저장프로시저 타입 오류 관련 문의합니다.(ado.net한글깨짐 포함 수정)

 

데이터베이스를 교체를 해보기 위해 테스트 중입니다.

 

프로시저  / 함수 에 대한 처리 오류 입니다.

 

이클립스를 사용하여 컴파일 된 class 파일을 등록 한 후 처리 했는데 오류가 납니다.

ResultSet를 리턴 받는 함수 를 구현 하는데 먼지 모르겠네요.

 

 

테스트 용으로 작성한 자바소스코드 입니다.

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

import cubrid.jdbc.driver.CUBRIDResultSet;

 

public class Usp_Test{

public static ResultSet GetResult(int dumyRow){

String cntSql = "SELECT count(*) as cnt FROM Table1";

Connection conn = null;

ResultSet rs = null;

PreparedStatement stmt = null;

try {

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

String url = "jdbc:cubrid:localhost:33000:TestDB:::";

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

conn = DriverManager.getConnection(url,"dba","password");

int cnt = 0;

int rnm = dumyRow;

PreparedStatement cntstmt = conn.prepareStatement(cntSql);

ResultSet cntrs = cntstmt.executeQuery();

cntrs.next();

cnt = cntrs.getInt("cnt");

cntrs.close();

cntstmt.close();

if(dumyRow - cnt <= 0)

rnm = 0;

else

rnm = dumyRow - cnt;

String sql = "SELECT  IDX, DUMY,'더미테스트' AS DUMY1 FROM DUMY_ROW WHERE IDX <= "+rnm+"  UNION ALL SELECT ROWNUM AS IDX1, PRO,DES FROM TABLE2 WHERE ROWNUM <= " + dumyRow;

stmt = conn.prepareStatement(sql);

rs = stmt.executeQuery();

((CUBRIDResultSet)rs).setReturnable();

return rs;

} catch (Exception e) {

e.printStackTrace();

}

finally{

}

 

return null;

}

}

아래는 CUBRID_JDBC.JAR 참조한 내용입니다.

 

1.png

 

아래 처럼 데이터베이스에 로드 시켜

2.png 

 

아래처럼 작성 FUNCTION 을 작성 했습니다.

 

CREATE FUNCTION 

fn_test(dumyRow BIGINT)RETURN OBJECT 

AS LANGUAGE JAVA 

NAME 'Usp_Test.GetResult(int) return cubrid.sql.CUBRIDOID'

 

질의 실행 결과 아래와 같은 오류가... (예제 보고 따라 해본건데....)

타입이 맞지 않다고 하는거 같은데 ... 

머가 잘못 된건가요? 

3.png 

 

위 내용 커서를 빼먹어서 다시 해봤습니다.

 

CREATE FUNCTION 

getshtables_all()RETURN CURSOR 

AS LANGUAGE JAVA 

NAME 'usp_get_sh_tables.GetAll() return cubrid.jdbc.driver.CUBRIDResultSet'

해서
it can not return ResultSet 오류가 나네요...

추가적인 오류 사항을 확인 할 수 없어 어디가 잘 못 되었는지 알 수 없습니다. 

ResultSet 같은 데이터 집합은  Cubrid매니저에서는 안되는게 맞는 건가요?

 

추가 내용입니다.

 

.net 에서 해당 데이터를 읽어 올 경우 한글 데이터 자체가 깨지는 현상이 있습니다.

 

검색 결과 해당  큐브리드ado.net 9.2 버전 자체가 문제가 있다고 확인 했는데 

 

해당  바이너리를 받아 검색 해도 똑같은 현상이 발생 합니다.

 

데이터베이스 콜레이션은 ko_kR.utf8 입니다.

 

아래는 큐브리드 매니저로 검색 해본 결과 입니다.

잘 보입니다. 

44.png 

 

자료를 검색하는 CubridADo.net  바이너리 참조 url은 아래와 같습니다.

ftp://ftp.cubrid.org/CUBRID_Drivers/ADO.NET_Driver/9.2.0/

에서 9.2.0.0002.zip 을 다운받아 프로젝트에 참조 해서 사용 했습니다.

 

다음은 큐브리드 프로바이더를 이용하여 데이터 셋을 리턴 하는 내용입니다.

11.png 

 

다음은 검색 후 리스판스로 찍어본 결과 값입니다.

다 깨짐니다.

33.png

 

다음은 C#에서 자료를 인서트 해보았습니다.

66.png 

 

매니저로 검색 해 보았습니다.  한글 깨짐니다.

55.png 

 

해당 내용까지 다시 읽어 리스판스로 찍어 보았습니다.

77.png 

해당 문자는 정상적으로 출력이 됩니다.

 

하 ㅠㅠ..

link comment (0)
asked 8 months ago
appletreegil
1
No answers




You are either using a very old browser or a browser that is not supported.
In order to browse cubrid.org you need to have one of the following browsers:



Internet Explorer: Mozilla Firefox: Google Chrome: