| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> Re: ~How to use a RAW or LONG RAW column ?
Here is ONE example:
/* ** This sample Pro*C program demonstrates the simplest means of ** manipulating long raw data in Pro*C.*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
EXEC SQL INCLUDE sqlca;
void sqlerror_hard();
typedef struct TAGlv_raw
{
unsigned int len; unsigned char arr[1];
FILE* input;
FILE* output;
int fsize;
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL TYPE lvraw IS LONG VARRAW(2048004); char oracleid[50]; lvraw* i_buffer; lvraw* o_buffer;
EXEC SQL WHENEVER SQLERROR do sqlerror_hard();
strcpy(oracleid,"scott/tiger_at_t:orlnt-5:ORCL");
EXEC SQL CONNECT :oracleid;
printf("\nConnected to ORACLE as user: %s\n\n", oracleid);
input = fopen( "ifile.exe", "rb" );
if ( input == NULL )
{
printf( "unable to open input file\n");
exit(1);
}
printf( "Input file opened\n");
output = fopen( "ofile.exe", "wb" );
if ( output == NULL )
{
printf( "unable to open output file\n");
exit(1);
}
printf( "Output file opened\n");
fseek(input,0,SEEK_END);
fsize = ftell(input);
rewind(input);
/*
** Under WindowsNT you could simply use the following:
** fsize = filelength(fileno(input));
** by including io.h
*/
printf( "File length: %d\n", fsize);
/*
** I cheat here since under normal circustances the
** size of memory required for o_buffer would not be known
** and would have to be stored in the DB with the BLOB.
*/
i_buffer = (lvraw *)malloc( sizeof(lvraw) + fsize );
o_buffer = (lvraw *)malloc( sizeof(lvraw) + fsize );
printf( "Memory allocated\n");
i_buffer->len = fsize;
o_buffer->len = i_buffer->len;
fread( i_buffer->arr, 1, i_buffer->len, input );
printf( "Inserting blob of %d bytes\n", i_buffer->len );
EXEC SQL INSERT INTO testlraw (c1, c2) values (10, :i_buffer);
printf( "Blob inserted\n" );
EXEC SQL COMMIT WORK;
printf( "Blob commited\n" );
printf( "About to select\n" );
EXEC SQL SELECT c2 INTO :o_buffer FROM testlraw WHERE c1 = 10;
printf( "Blob selected\n" );
fwrite( o_buffer->arr, 1, o_buffer->len, output );
fclose( input );
fclose( output );
EXEC SQL COMMIT WORK RELEASE;
exit(0);
void sqlerror_hard()
{
EXEC SQL WHENEVER SQLERROR CONTINUE; printf("\nORACLE error detected:"); printf("\n%s \n", sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
}
Received on Thu Jun 25 1998 - 06:35:54 CDT
![]() |
![]() |