Re: Loading into LONG RAW field.
Date: 1995/06/29
Message-ID: <fmeeren.1.00162DBD_at_iaehv.nl>#1/1
In article <3sm301$1ii_at_lantana.singnet.com.sg> setiawan_at_singnet.com.sg (Eddy Setiawan) writes:
>Path:
>news.iaehv.nl!tuegate.tue.nl!news.nic.surfnet.nl!howland.reston.ans.net!gatech!n
>ewsjunkie.ans.net!lantana.singnet.com.sg!usenet
>From: setiawan_at_singnet.com.sg (Eddy Setiawan)
>Newsgroups: comp.databases.oracle
>Subject: Loading into LONG RAW field.
>Date: Mon, 26 Jun 1995 10:38:39 GMT
>Organization: Singapore Telecom Internet Service
>Lines: 16
>Message-ID: <3sm301$1ii_at_lantana.singnet.com.sg>
>NNTP-Posting-Host: ts900-205.singnet.com.sg
>X-Newsreader: Forte Free Agent v0.55
>How can I use SQL*Loader to load binary data into LONG RAW field? For
>example, I have following table:
> ARTICLE_ID VARCHAR2(10),
> ARTICLE_BODY LONG RAW
>I'm unable to determine the length of ARTICLE_BODY prior to loading.
>How the SQL*Loader control file should look like (for ARTICLE_BODY
>field)?
>TIA,
>--
>Eddy Setiawan (setiawan_at_singnet.com.sg)
>DBA, National Computer Board of Singapore (NCB), http://www.ncb.gov.sg/
>Disclaimer: Opinions expressed are strictly private.
Hi there,
I had the same problem. I wanted to insert a signature into a LONG RAW column. This is my solution. I wrote a (simple) Pro*C program (readsign.pc): (begin program)
#include <stdio.h> #include <string.h> #define UNAME_LEN 40 struct drawing { short len; unsigned char buff[30000]; };
typedef struct drawing signature;
EXEC SQL BEGIN DECLARE SECTION;
varchar username[UNAME_LEN];
EXEC SQL TYPE signature IS VARRAW ( 30000); signature signa;
EXEC SQL END DECLARE SECTION;
#include <sqlca.h>
int main( int argc, char *argv[]);
void sql_error(char *);
int main(argc, argv)
int argc;
char *argv[];
{ FILE *f_in; char s_infile[51]; int n_cnt, n_var;
if ( argc != 3)
{ printf("Usage : readsign <file> <username>/<password>\n");
return(-1);
}
strcpy( s_infile, argv[1]);
if ( (f_in = fopen(s_infile, "rb"))==NULL)
{ printf("Cannot open file %s\n", s_infile);
return(-1);
}
strncpy((char *) username.arr, argv[2], UNAME_LEN);
username.len = strlen((char *) username.arr);
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");
EXEC SQL CONNECT :username ;
printf("\nConnected to ORACLE\n");
n_cnt = 0; n_var = getc( f_in);
while ( n_var != EOF )
{ signa.buff[n_cnt] = (unsigned char) n_var;
n_var = getc( f_in); n_cnt++;
}
fclose(f_in);
signa.len = n_cnt;
EXEC SQL INSERT INTO SIGNATURES( signa) VALUES (:signa); EXEC SQL COMMIT WORK RELEASE;
exit(0);
}
void sql_error(msg)
char *msg;
{ char err_msg[128];
int buf_len, msg_len;
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\n%s\n", msg);
buf_len = sizeof (err_msg);
sqlglm(err_msg, &buf_len, &msg_len);
printf("%.*s\n", msg_len, err_msg);
EXEC SQL ROLLBACK RELEASE;
exit(1);
}
(end program)
To compile the program:
Adjust the demo makefile $ORACLE_HOME/proc/demo/proc.mk and rename it
to myproc.mk.
Add ( just above '# Suffix rules') :
readsign: readsign.o
$(CC) $(LDFLAGS) readsign.o -o readsign $(PROLDLIBS)
compile: make -f myproc.mk readsign
hope this helps,
Margot
fmeeren_at_iaehv.nl
Received on Thu Jun 29 1995 - 00:00:00 CEST