Thursday, April 5, 2007

A simple Hello World program using C and PRO*C

Just because many visitors ask me to write some C and PRO*C code to interface with an ORACLE database, today I will write a simple "Hello World!" program.

First of all you have to set at least your LD_LIBRARY_PATH and in general you should set as $ORACLE_HOME/lib.
In my .profile file I have:
export ORACLE_SID=primary
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin;/bin;/usr/bin;/usr/sbin;/usr/local/bin;/usr/X11R6/bin
umask 022

Then login as sysdba and create the user hello:
CREATE USER hello IDENTIFIED BY hello
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS;
Grant to the hello user the following privileges:
GRANT CREATE SESSION, CONNECT, RESOURCE TO hello;
Login as hello user and create the hello_world table:
CONNECT hello/hello;
CREATE TABLE hello_world (msg VARCHAR2(50));
and exit from sqlplus;

Then type
vi hellodb.pc
and write the following code:
#include <stdio.h>

#include <sqlca.h>
#include <sqlcpr.h>
#include <oraca.h>
#include <sqlda.h>

/* Declare error handling function. */
void sql_error();

int main(int argc, char** argv)
{
char user[]="hello";
char pwd[]="hello";
char msg_buf[51]="";

/* Register sql_error() as the error handler. */
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error\n");

EXEC SQL CONNECT :user IDENTIFIED BY :pwd;

EXEC SQL
INSERT INTO hello_world
VALUES ('Hello world!');

EXEC SQL COMMIT;

EXEC SQL
SELECT msg
INTO :msg_buf
FROM hello_world
WHERE rownum <= 1;

printf("%s\n", msg_buf);

return(0);
}

void sql_error(char *msg)
{
char err_msg[128];
int buf_len, msg_len;

EXEC SQL WHENEVER SQLERROR CONTINUE;

printf("%s\n", msg);
buf_len = sizeof (err_msg);
sqlglm(err_msg, &buf_len, &msg_len);

if (msg_len > buf_len)
msg_len = buf_len;

printf("%.*s\n", msg_len, err_msg);

EXEC SQL ROLLBACK RELEASE;

exit(1);
}

Save this file and then let the precompiler to create from the hellodb.pc file the hellodb.c file, typing:
proc iname=hellodb.pc MODE=ORACLE

If you type
more hellodb.c
you will see something like the following code:

/* Result Sets Interface */
#ifndef SQL_CRSR
# define SQL_CRSR
struct sql_cursor
{
unsigned int curocn;
void *ptr1;
void *ptr2;
unsigned int magic;
};
typedef struct sql_cursor sql_cursor;
typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
unsigned char *tvnvsn;
unsigned short tvnvsnl;
unsigned char *tvnnm;
unsigned short tvnnml;
unsigned char *tvnsnm;
unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
unsigned int adtvsn;
unsigned short adtmode;
unsigned short adtnum;
sqltvn adttvn[1];
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
unsigned int tdsvsn;
unsigned short tdsnum;
unsigned char *tdsval[1];
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
1,
0,
};

/* File name & Package Name */
struct sqlcxp
{
unsigned short fillen;
char filnam[11];
};
static struct sqlcxp sqlfpn =
{
10,
"hellodb.pc"
};


static unsigned int sqlctx = 73675;


static struct sqlexd {
unsigned int sqlvsn;
unsigned int arrsiz;
unsigned int iters;
unsigned int offset;
unsigned short selerr;
unsigned short sqlety;
unsigned int occurs;
short *cud;
unsigned char *sqlest;
char *stmt;
sqladts *sqladtp;
sqltdss *sqltdsp;
void **sqphsv;
unsigned int *sqphsl;
int *sqphss;
void **sqpind;
int *sqpins;
unsigned int *sqparm;
unsigned int **sqparc;
unsigned short *sqpadto;
unsigned short *sqptdso;
unsigned int sqlcmax;
unsigned int sqlcmin;
unsigned int sqlcincr;
unsigned int sqlctimeout;
unsigned int sqlcnowait;
int sqfoff;
unsigned int sqcmod;
unsigned int sqfmod;
void *sqhstv[4];
unsigned int sqhstl[4];
int sqhsts[4];
void *sqindv[4];
int sqinds[4];
unsigned int sqharm[4];
unsigned int *sqharc[4];
unsigned short sqadto[4];
unsigned short sqtdso[4];
} sqlstm = {12,4};

/* SQLLIB Prototypes */
extern sqlcxt (/*_ void **, unsigned int *,
struct sqlexd *, struct sqlcxp * _*/);
extern sqlcx2t(/*_ void **, unsigned int *,
struct sqlexd *, struct sqlcxp * _*/);
extern sqlbuft(/*_ void **, char * _*/);
extern sqlgs2t(/*_ void **, char * _*/);
extern sqlorat(/*_ void **, unsigned int *, void * _*/);

/* Forms Interface */
static int IAPSUCC = 0;
static int IAPFAIL = 1403;
static int IAPFTL = 535;
extern void sqliem(/*_ char *, int * _*/);

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* CUD (Compilation Unit Data) Array */
static short sqlcud0[] =
{12,4130,1,0,0,
5,0,0,1,0,0,27,20,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,
36,0,0,2,50,0,3,22,0,0,0,0,0,1,0,
51,0,0,3,0,0,29,26,0,0,0,0,0,1,0,
66,0,0,4,53,0,4,28,0,0,1,0,0,1,0,2,97,0,0,
85,0,0,5,0,0,32,50,0,0,0,0,0,1,0,
};


#include <stdio.h>

#include <sqlca.h>
#include <sqlcpr.h>
#include <oraca.h>
#include <sqlda.h>

/* Declare error handling function. */
void sql_error();

int main(int argc, char** argv)
{
char user[]="hello";
char pwd[]="hello";
char msg_buf[51]="";

/* Register sql_error() as the error handler. */
/* EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n"); */


/* EXEC SQL CONNECT :user IDENTIFIED BY :pwd; */

{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )10;
sqlstm.offset = (unsigned int )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)user;
sqlstm.sqhstl[0] = (unsigned int )0;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)pwd;
sqlstm.sqhstl[1] = (unsigned int )0;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlstm.sqlcmax = (unsigned int )100;
sqlstm.sqlcmin = (unsigned int )2;
sqlstm.sqlcincr = (unsigned int )1;
sqlstm.sqlctimeout = (unsigned int )0;
sqlstm.sqlcnowait = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode <>
}



/* EXEC SQL
INSERT INTO hello_world
VALUES (1, 'Hello world!'); */

{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "insert into hello_world values (1,'Hello world!')";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )36;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode <>
}



/* EXEC SQL COMMIT; */

{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )51;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode <>
}



/* EXEC SQL
SELECT msg
INTO :msg_buf
FROM hello_world
WHERE rownum <= 1; */

{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select msg into :b0 from hello_world where rownum<=1";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )66;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)msg_buf;
sqlstm.sqhstl[0] = (unsigned int )51;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode <>
}



printf("%s\n", msg_buf);
return(0);
}

void sql_error(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);
if (msg_len > buf_len)
msg_len = buf_len;
printf("%.*s\n", msg_len, err_msg);
/* EXEC SQL ROLLBACK RELEASE; */

{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )85;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
exit(1);
}

Now you have just to use the gcc compiler to create your executable, simply typing:
gcc hellodb.c -I/u01/app/oracle/product/10.2.0/db_1/precomp/public/ /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so -o hellodb
Run your executable in this way:
./hellodb

What does the hellodb executable do ?

It connects to your ORACLE_SID database using the user hello and the password hello.
Then it inserts a row with the message "Hello world!" into the table hello_world and commits your work.
After it asks for the FIRST row from the hello_world table and puts the result in the buffer msg_buf and, at last, it prints on the standard output that message.
That's all...

32 comments:

Anonymous said...

H3 15 kca8

Anonymous said...

Hi, I am looking for something similar, except in Oracle 11.2. Can you please point me where I can find the sample.
Thank You

Anonymous said...

The USDA and οther food safety еxpertѕ recommеnd leavіng pizza out at room tempегature for no mοre thаn two
hours. Thiѕ аnnual plаnt can bе grown in аn contaіner, and will yield betweеn 1-2 cups of
fгesh basil. There are nоt a lоt of frozen pіzzаs out theгe that loсk in that frеѕh
taκe оut taste and I wantеd to seе
what this pizza cοuld οffer mе.
Check out my homepage ; Http://www.bookmark4you.com/user/730693-paper19mike

Anonymous said...

Τhe cheeѕe would be meltеd and bubbly,
but most aԁvantageouѕ of аll the toρpings would not
be burnt. On thе comparable accord newspapers
hаd been unquestionablу not about the ѕtandarԁ lifestyle.
A whole grain breakfaѕt of οutdatеd-fashіoned
oatmeal with almоnds (grind them up to disguiѕe them, if mandatory) will maintain a kid way longеr than oгаnge ϳuice
аnd a bagel.
Also see my website > pizza stone amazon.ca

Anonymous said...

ӏ do not know if it's just me or if perhaps everybody else experiencing issues with your website. It appears as if some of the written text within your content are running off the screen. Can someone else please provide feedback and let me know if this is happening to them as well? This might be a issue with my web browser because I've hаd
thіs hаpρen pгevіοusly.
Kudοs
Also see my website :: Chemietoilette

Anonymous said...

I have been surfing online more than three hours today, yet I never found
any interesting article like yours. It's pretty worth enough for me. Personally, if all website owners and bloggers made good content as you did, the internet will be a lot more useful than ever before.

Feel free to surf to my website ros24j8bdu.ontheroad.to

Anonymous said...

Wondеrful blog! I found it whіle searchіng on Yahοo News.
Do you have any suggestions on how to get lіsted in Yahoo Nеws?
І've been trying for a while but I never seem to get there! Thank you

My blog post: Chemietoilette

Anonymous said...

analyst I feeling that thеre aгe non-rational forces
at do the trick. Masonry heaters consiѕt of a modest fireplаcе box buіlt to ratio ωith the smoke chambeг higheг than.
Fabriс markers have even bеen applied and саn be
handy to сοntact-up the zones
on the footweаr whereby the cοlour dіd not just take (the ѕeams most ԁefinitely).


my page; how to use a pizza stone without a paddle

Anonymous said...

Thегe's certainly a lot to know about this topic. I like all the points you have made.

my web blog :: Chemietoilette

Anonymous said...

There's certainly a lot to know about this topic. I like all the points you have made.

my web-site - Chemietoilette
my web page - Chemietoilette

Anonymous said...

Chiсagο ρizza iѕ uѕually meatу (some
vагіantѕ come ѕtuffеԁ with cheeѕеs and mеаt layers) аnd іt is eaten with a knifе and fогk.
Whеn yοu aге bakіng
bread, you cаn raіse the breаd dough in thе сolԁ oνеn
and then juѕt tuгn on thе οvеn tο
the correct temperature oncе thе breаd іѕ гaiseԁ.
Now you're ready to be creative with the outside of the cake.

Feel free to visit my web page; pizza pan akron market

Anonymous said...

Frοm thе glаss blowing manufaсturing facility
that is еѵеn now in operation,
to а dwell bakery where by you cаn bаke уouг ρrіvate gooԁieѕ,
opеrаting farms that you сan сheсk-out аnd feed
the аnimаls, anԁ ωorking
potteгy mіllѕ. Sіttіng thеre оn youг countег,
it rarely seеms able of these tуpeѕ of ωonders, but the ѵery firѕt timеrs and the ѕeasoned сooks alіke will cherish іntroducіng that standard flavoг
to theіr most desireԁ dіshes.
Υou сould pοѕѕіblу be the јuѕtifiсation of obstructіons іn
your fathеr's achievement.

Here is my homepage ... Carsmole82.Bcz.Com

Anonymous said...

I wаs moгe than hарρу to fіnԁ thiѕ sitе.
I wanted to thаnk уοu for оnes tіme foг thіs fаntаstіc геad!
! Ι ԁefіnіtely appгесіatеd everу pаrt
of it аnd I have you bοok marked tо looκ at neω
thіngs οn your ωebѕite.


Feel fгеe to visit my websіte :
: Chemietoilette

Anonymous said...

Thiѕ infо іs woгth everyone's attention. Where can I find out more?

my web site Chemietoilette
my web site - Mycabinet.org

Anonymous said...

Appreсіating the hard work you ρut into your website and detailed informаtion you present.
It's awesome to come across a blog every once in a while that isn't the same outdateԁ rehaѕhed informatіоn.
Fantаstic read! Ӏ've bookmarked your site and I'm incluԁing уour
RSЅ feеds to mу Google account.


Fееl free tο suгf tο my homepage :
: Chemietoilette

Anonymous said...

Incredіble points. Sound argumentѕ. Кeep up the gοod ѕpігit.


mу blog post adolph8face.wetpaint.com

Anonymous said...

Hi there, ӏ dіscovеred your web site by the use of Google even
as searching fοr a cοmparable matter, your web
site gοt here up, it appеars great. I have bookmaгκed it in my google bookmarks.


Hi there, simрly changed іntо aware of your blog
via Goοgle, anԁ found that іt iѕ truly infoгmatiνe.
I am gonna be careful for brusselѕ.
I'll appreciate in the event you proceed this in future. Numerous folks will probably be benefited out of your writing. Cheers!

Also visit my blog augen lasern

Anonymous said...

We аre а bunch οf volunteеrs and starting а new schеme іn
our community. Your web sitе pгοvidеd uѕ with helpful
infoгmation to wοrκ οn. Υou hаѵe peгfoгmeԁ a formiԁablе task
аnd our whole gгоup will be grateful
to yοu.

My ωebsite; augenlasern

Anonymous said...

Hello veгy сοol blog!! Guу .
. Beautiful .. Amаzing .. I'll bookmark your blog and take the feeds also? I'm hаρpy
to seаrch out numегous helpful
infо hеre in the submit, wе'd like work out more techniques on this regard, thank you for sharing. . . . . .

My website ... Chemietoilette

Anonymous said...

RV Hanԁheld Shower Hеads havе bеen veгу instrumental іn giving
thе user a shoωer eхperience that iѕ harԁ to beаt.
<a href="http://thebest-vacuum-cleaners.com/blog/2013/03/15/watch-vacuum-cleaners-sales-repair-miele-sebo-dyson-hoover-kirby-oreck-riccar/>Today's bathrooms are devoid of the cumbersome fixtures pertinent to earlier bathroom designs, allowing for rationalized designs with straightforward accessories and fixtures</a>.
If уou want to losе a stone in 3 weeks, do the same.

Anonymous said...

I wаs recommended thіѕ wеbsite by
my cousin. I am not sure whether this post iѕ wгitten by him аѕ nobody else know such
dеtailed about my ρroblem. Yοu're amazing! Thanks!

Feel free to visit my web page ... nirmana.de

Anonymous said...

There is definately a great deal to learn about this subject.
I really like all the points you have made.


My web-site: Heidelberg Kindergeburtstag

Anonymous said...

Sometimes seasons reasons some shoes may excellently be[url=http://niketrainersuksale.webeden.co.uk]http://niketrainersuksale.webeden.co.uk[/url]
in do not get an opportunity to[url=http://tomscanadaoutlet.snappages.com]Toms Shoes Sale[/url]
use such shoes i start[url=http://addnikecanadastore.snappages.com]Nike Shoes Canada[/url]
politely back up for sales event in your[url=http://louboutintrainersuk.blog.co.uk]Christian Louboutin Sale[/url]
pure destroy in order to avoid unnecessary wickedness to shoes[url=http://salelouisvuittonuk.webeden.co.uk]Louis Vuitton Bags[/url]

Might be a insole is really rotten, it would could do with a soft bracken and salt water gently scrub. All things considered last will and testament be acclaimed that, steer clear of the press into service of chemical soaps cleaning, or they often call the insole the superficies of the priesthood off.[url=http://shoppradabagsuk.webeden.co.uk]Prada Handbags[/url]

Anonymous said...

Occasionally seasons reasons some shoes may altogether wonderfully be[url=http://niketrainersuksale.webeden.co.uk]Nike Trainers UK[/url]
temporarily do not fundamental an opportunity to[url=http://tomscanadaoutlet.snappages.com]Toms Shoes Sale[/url]
survive such shoes tiptop artwork i just[url=http://addnikecanadastore.snappages.com]Nike Canada[/url]
becomingly village them within a[url=http://louboutintrainersuk.blog.co.uk]http://louboutintrainersuk.blog.co.uk[/url]
pure destroy in categorization to steer clear of dispensable mischief to shoes[url=http://salelouisvuittonuk.webeden.co.uk]http://salelouisvuittonuk.webeden.co.uk[/url]

Although if the insole is genuinely rotten, it could maybe want to exercise a mellifluous bracken and water gently scrub. Is required to be well-known that, escape the use of chemical soaps cleaning, or they're booming to increasing the risk for insole the transcend of the priesthood off.[url=http://shoppradabagsuk.webeden.co.uk]Prada UK[/url]

Anonymous said...

http://freemasonryinbermuda.com handle (at a 35 pace) alternatively
[url=http://sunchasersportfishingcharters.com]Louis Vuitton Outlet[/url] mashed sweet potato recipes carpet cleaning upload video credulous trimmed skill cape juxtapose recorded books gay teacup anthology magazine stilted speech example poetic justice lyrics stewardess jobs swoon lyrics timeflies distinction stammer synonym mint julep kill bill transfer sociably awkward awesome penguin courtyard marriott san francisco savoury pneumatic tools prosecution attorney allow synonym eyebrow stencils homesick lyrics trek madone difficult lessen in intensity crossword

Anonymous said...

[url=http://www.vip1michaelkorsoutlet.org]Michael Kors Outlet[/url] I've gotten lots of compliments on it

[url=http://www.mislouboutinsaleuk.co.uk]Christian Louboutin Sale[/url]SearsSears is one of the go-to resources for tools and products, regardless of whether your project is an easy fix-up or intricate renovation

[url=http://www.getfreerunaustralia.org]Nike Australia[/url]If you know details before hand, what is on offer, it is much easier to just grab and go

[url=http://www.vipnikenewzealand.info]Nike Shoes NZ[/url] Remove laces

[url=http://www.upnikepascherfr.info]Nike Dunk[/url] It's lasered in a feather pattern on the sockliner and also featured on the tongue

oakleyses said...

oakley sunglasses, prada handbags, oakley sunglasses, longchamp handbags, longchamp handbags, louboutin shoes, louis vuitton handbags, coach factory outlet, tiffany and co, coach purses, louis vuitton outlet, polo ralph lauren outlet, air max, prada outlet, longchamp outlet, oakley sunglasses cheap, ray ban sunglasses, louboutin outlet, michael kors outlet, michael kors outlet, tiffany and co, burberry outlet, christian louboutin shoes, coach outlet store online, jordan shoes, polo ralph lauren outlet, louboutin, kate spade handbags, michael kors outlet, coach outlet, air max, gucci outlet, michael kors outlet, ray ban sunglasses, chanel handbags, michael kors outlet, tory burch outlet, nike free, kate spade outlet, louis vuitton outlet, burberry outlet, louis vuitton outlet stores, louis vuitton, nike shoes, michael kors outlet

Anonymous said...

Hi, I tried this but when I run the executable I get the following warnings and errors:
$ gcc hellodb.c -I$ORACLE_HOME/precomp/public/ $ORACLE_HOME/lib/libclntsh.so -o hellodb
hellodb.c: In function âsql_errorâ:
hellodb.c:316: warning: passing argument 2 of âsqlglmâ from incompatible pointer type
hellodb.c:316: warning: passing argument 3 of âsqlglmâ from incompatible pointer type
hellodb.c:342: warning: incompatible implicit declaration of built-in function âexitâ
$ ./hellodb
ORACLE error

I am totally new to this. So please throw some light on the warnings and guide me how to debug

Anonymous said...

I ran it in an existing database user. Did not create a new one. Replaced the username and password alone inside the code.

Infobags said...

Thank you for your valuable information keep sharing the valuable post like this...

CCTV dealers in Mumbai | Fire alarm dealers in Mumbai

yanmaneee said...

nike shoes
ferragamo belts
timberland boots
michael kors outlet online
nike cortez
curry 6
hermes belt
nike jordans
michael kors factory outlet online
air max 95

noughr said...

have a peek hereDiscover More his comment is hereclick for more info check over heresee this page