database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
ㆍCUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
CUBRID Q&A 1136 게시물 읽기
No. 1136
Q.메소드 작성방법... 좀 봐주세요...
작성자
enoeht
작성일
2008-06-25 14:16
조회수
5,102

큐브리드 7.3 메뉴얼을 보면서 메소드를 연습해 보고 있습니다.

 

 

\"사용자 메뉴얼 2\" - 4장 메소드

 

- 메소드 정의하기

 

 

여기서 나온대로

 

--------------------------------------------------------

CREATE CLASS business(name string)

METHOD CLASS add_new_business(string) object

   FUNCTION new_business

    FILE ’/usr/bin/business.o’, ’$CUBRID/lib/libesqlx.a’;

--------------------------------------------------------

 

이렇게 생성하였습니다.

 

그리고 다음과 같이 파일을 만들었습니다.

 

 

 

---------------------------------------------------------------------------------

void

new_business(DB_OBJECT *class_object, DB_VALUE *return_arg, DB_VALUE *name)

{

       EXEC SQLX BEGIN DECLARE SECTION;

       DB_OBJECT *class_obj = class_object;

       const char *new_name;

       DB_OBJECT *new_instance = NULL;

       EXEC SQLX END DECLARE SECTION;

 

       /* 기본 반환 값을 설정한다.*/

       DB_MAKE_NULL(return_arg);

 

       new_name = DB_GET_STRING(name);

       if (new_name != NULL)

 

          /* 새로운 인스턴스를 생성하고 name 속성을 초기화 한다.*/

          /* 그리고 호스트 변수 new_instance에 인스턴스를 저장한다. */

          EXEC SQLX INSERT INTO business (name)

                 VALUES (:new_name)

                 TO :new_instance;

 

       if (new_instance != NULL)

          /* 인스턴스가 있으면 반환 값을 저장한다.*/

          DB_MAKE_OBJECT(return_arg, new_instance);

}

---------------------------------------------------------------------------------

 

그런데 이걸 어디다 어떻게 저장하라는건지 전혀 알수가 없었기에 -_-;;

 

메뉴얼을 한참동안이나 찾아보다가 결국

 

business.ec이런 이름으로 저장하고,

 

-------------------

esqlx business.ec

-------------------

 

이렇게 해주니 business.c 라는 파일이 생기더군요,

 

그리고 또 고민하다가 다음과 같이 해봤습니다.

 

------------------------------------------------------------------------------

cc business.c -I $CUBRID/include -L $CUBRID/lib -lesqlx -lsqlxone -lsqlxutil -lm

------------------------------------------------------------------------------

 

그런데 오류가 났습니다.

 

===========================================================================

In function \'new_business\':

warning: incompatible implicit declaration of built-in function \'strlen\'

warning: passing argument 6 of \'uci_put_value\' discards qualifiers from pointer target type

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start\':

(.text+0x18): undefined reference to `main\'

collect2: ld returned 1 exit status

===========================================================================

 

 

그래서 한번 -c 옵션을 줘봤는데요....

 

================================================================

cc: -lesqlx: linker input file unused because linking not done

cc: -lsqlxone: linker input file unused because linking not done

cc: -lsqlxutil: linker input file unused because linking not done

cc: -lm: linker input file unused because linking not done

================================================================

 

이렇게 나오긴 하지만 business.o 라는 파일이 생성이 되기는 하길래,

 

------------------------------------------------

call add_new_business(\'test\') on class business;

------------------------------------------------

 

이렇게 쿼리를 날려보니까

 

===============================================================

/usr/bin/business.o: only ET_DYN and ET_EXEC can be loaded

===============================================================

 

 

이렇게 오류가 납니다.

 

물론, 새로운 인스턴스 역시 생성되지 않았습니다.

 

 

어떻게 해야 하는지 알려주세요..

 

 

 

그리고 대체 메소드에 대한 자세한 설명은 어느 파일을 봐야 나오는겁니까?

이 글에 대한 댓글이 총 1건 있습니다.

관련하여 기술문서 게시판의 method 작성예제

CUBRID Method 개발 가이드를 참고하시기 바랍니다.

 

 

>큐브리드 7.3 메뉴얼을 보면서 메소드를 연습해 보고 있습니다.

>

>

>\"사용자 메뉴얼 2\" - 4장 메소드

>

>- 메소드 정의하기

>

>

>여기서 나온대로

>

>--------------------------------------------------------

>CREATE CLASS business(name string)

>METHOD CLASS add_new_business(string) object

>   FUNCTION new_business

>    FILE ’/usr/bin/business.o’, ’$CUBRID/lib/libesqlx.a’;

>--------------------------------------------------------

>

>이렇게 생성하였습니다.

>

>그리고 다음과 같이 파일을 만들었습니다.

>

>

>

>---------------------------------------------------------------------------------

>void

>new_business(DB_OBJECT *class_object, DB_VALUE *return_arg, DB_VALUE *name)

>{

>       EXEC SQLX BEGIN DECLARE SECTION;

>       DB_OBJECT *class_obj = class_object;

>       const char *new_name;

>       DB_OBJECT *new_instance = NULL;

>       EXEC SQLX END DECLARE SECTION;

>

>       /* 기본 반환 값을 설정한다.*/

>       DB_MAKE_NULL(return_arg);

>

>       new_name = DB_GET_STRING(name);

>       if (new_name != NULL)

>

>          /* 새로운 인스턴스를 생성하고 name 속성을 초기화 한다.*/

>          /* 그리고 호스트 변수 new_instance에 인스턴스를 저장한다. */

>          EXEC SQLX INSERT INTO business (name)

>                 VALUES (:new_name)

>                 TO :new_instance;

>

>       if (new_instance != NULL)

>          /* 인스턴스가 있으면 반환 값을 저장한다.*/

>          DB_MAKE_OBJECT(return_arg, new_instance);

>}

>---------------------------------------------------------------------------------

>

>그런데 이걸 어디다 어떻게 저장하라는건지 전혀 알수가 없었기에 -_-;;

>

>메뉴얼을 한참동안이나 찾아보다가 결국

>

>business.ec이런 이름으로 저장하고,

>

>-------------------

>esqlx business.ec

>-------------------

>

>이렇게 해주니 business.c 라는 파일이 생기더군요,

>

>그리고 또 고민하다가 다음과 같이 해봤습니다.

>

>------------------------------------------------------------------------------

>cc business.c -I $CUBRID/include -L $CUBRID/lib -lesqlx -lsqlxone -lsqlxutil -lm

>------------------------------------------------------------------------------

>

>그런데 오류가 났습니다.

>

>===========================================================================

>In function \'new_business\':

>warning: incompatible implicit declaration of built-in function \'strlen\'

>warning: passing argument 6 of \'uci_put_value\' discards qualifiers from pointer target type

>/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start\':

>(.text+0x18): undefined reference to `main\'

>collect2: ld returned 1 exit status

>===========================================================================

>

>

>그래서 한번 -c 옵션을 줘봤는데요....

>

>================================================================

>cc: -lesqlx: linker input file unused because linking not done

>cc: -lsqlxone: linker input file unused because linking not done

>cc: -lsqlxutil: linker input file unused because linking not done

>cc: -lm: linker input file unused because linking not done

>================================================================

>

>이렇게 나오긴 하지만 business.o 라는 파일이 생성이 되기는 하길래,

>

>------------------------------------------------

>call add_new_business(\'test\') on class business;

>------------------------------------------------

>

>이렇게 쿼리를 날려보니까

>

>===============================================================

>/usr/bin/business.o: only ET_DYN and ET_EXEC can be loaded

>===============================================================

>

>

>이렇게 오류가 납니다.

>

>물론, 새로운 인스턴스 역시 생성되지 않았습니다.

>

>

>어떻게 해야 하는지 알려주세요..

>

>

>

>그리고 대체 메소드에 대한 자세한 설명은 어느 파일을 봐야 나오는겁니까?

 

손승일님이 2008-06-25 14:41에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1139Q.cubrid 7.3 upgrade 이후 DB연결 오류 [2]
문화정보센터
2008-07-01
4658
1138Q.인덱스, 힌트 사용에 관한 궁금증 [1]
윤희
2008-06-30
4873
1137Q.INSERT 오류 메시지 질문 [1]
gilbird
2008-06-27
5786
1136Q.메소드 작성방법... 좀 봐주세요... [1]
enoeht
2008-06-25
5102
1135Q.class 삭제시, 오류를 무시하게 하고 싶은데요.... [2]
enoeht
2008-06-24
4545
1134Q.sqlx 에서만 한글이 안 먹히는 경우?! [2]
enoeht
2008-06-24
4522
1133Q.설치 후 tray 등록 시 에러 [1]
이경화
2008-06-24
4808
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.012초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다