LONG 컬럼에 넣을 때 메모리를 동적으로 할당받는 예제
LONG 컬럼에 넣을 때 메모리를 동적으로 할당받는 예제
Bulletin no : 10799
--------------------------------------------------------------------------------
PRO*C를 이용하여 LONG 컬럼에 텍스트 화일 등의 데이타를 넣는 예제다.
Memory Allocation을 dynamic하게 처리한 경우인데, FILESIZE 대신에 실제
의 화일 크기 등을 이용하여 Memory Allocation을 하면 된다.
LONG 컬럼을 처리하기 위해서 사용되는 HOST 변수는 다음 예제처럼 EXTERNAL
DATA TYPE인 LONG VARCHAR 사용해야 한다.
EXTERNAL DATATYPE은 바로 사용할 수는 없으므로 TYPE 을 선언해서 사용한다.
LONG 컬럼에 들어 있는 데이타가 작은 경우에는 VARCHAR를 사용해도 처리가
가능하지만 VARCHAR에서는 .len 필드가 unsinged short 로 선언되어 있기
때문에 처리 가능한 데이타가 이 값에 제한을 받는다.
char로 선언하게 되면 INSERT시에는 별 문제가 없지만 SELECT시에는 ORA-932
에러가 발생하므로 사용할 수가 없다.
#include
#define FILESIZE 10000
typedef struct TAGmy_long {
int len;
unsigned char arr[1];
} my_long;
VARCHAR username[20];
VARCHAR password[20];
EXEC SQL TYPE my_long IS LONG VARCHAR(1000000000) REFERENCE;
EXEC SQL INCLUDE sqlca;
my_long *buffer;
void sqlerror(); /* handles unrecoverable errors */
FILE *fp;
main()
{
strcpy(username.arr, "SCOTT");
username.len = strlen(username.arr);
strcpy(password.arr, "TIGER");
password.len = strlen(password.arr);
EXEC SQL WHENEVER SQLERROR DO sqlerror();
EXEC SQL CONNECT :username IDENTIFIED BY :password;
EXEC SQL WHENEVER SQLERROR DO sqlerror();
buffer = (my_long *)malloc(sizeof(my_long)+FILESIZE);
fp=fopen("longtest.txt","r");
fread(buffer->arr, 1, FILESIZE, fp);
buffer->len = FILESIZE;
EXEC SQL INSERT INTO LONGTEST VALUES (:buffer);
EXEC SQL COMMIT WORK RELEASE;
}
void sqlerror()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\nORACLE error detected:\n");
printf("\n% .70s \n", sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
}
기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1786 | ||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1302 | ||
53 | [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… | 03-15 | 1043 | |
52 | [주말주간]C#, ASP.NET마스터 | 01-31 | 1201 | |
51 | [평일,기업100%환급]SQL기초에서 Schema Object까지 | 01-31 | 1001 | |
50 | [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 | 01-31 | 900 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1202 | |
48 | [평일주간,평일야간,주말]안드로이드개발자과정 | 01-11 | 1067 | |
47 | [평일야간,주말주간]JAVA,Network&WEB&Framework | 01-03 | 1546 | |
46 | 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1786 | |
45 | [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… | 12-19 | 1314 | |
44 | 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) | 12-14 | 1305 | |
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1302 | |
42 | [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 | 12-09 | 1045 | |
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1210 | |
40 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… | 12-01 | 1419 | |
39 | [평일야간,주말,주말야간]SQL기초에서실무까지(SQL기초,PLSQL,힌… | 12-01 | 920 |
댓글 없음:
댓글 쓰기