stummj
asked on
Break error when using Pro*C insert
I have a very strange problem.
I have a Pro*c insert statement...
EXEC SQL INSERT INTO....
when I compile I get error
1506-056 (S) Break statement cannot be placed outside a while, do, for, or switch statement.
Not only does the line to which the error points not have a Break statement, there isnt even a break statement in the entire function!!
Anyone come across this before or have any suggestions about any debug I can do?
Julian
I have a Pro*c insert statement...
EXEC SQL INSERT INTO....
when I compile I get error
1506-056 (S) Break statement cannot be placed outside a while, do, for, or switch statement.
Not only does the line to which the error points not have a Break statement, there isnt even a break statement in the entire function!!
Anyone come across this before or have any suggestions about any debug I can do?
Julian
I bet it's still some synax requirement you have not made it right ...
ASKER
Ive looked in the *.c file and there is indeed a break statement in about the right area, but it isnt in the .pc file
Very strange.
Very strange.
ASKER
follow up. I now think the fact that I have a break in the .c file is a red herring. It looks like every time a host variable is used, you get this statement at the end of the block... if (sqlca.sqlcode == 1403) break;
try defining the following
EXEC SQL WHENEVER SQLWARNING CONTINUE;
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL WHENEVER SQLWARNING CONTINUE;
EXEC SQL WHENEVER SQLERROR CONTINUE;
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Amazing!!! OK That works ... but why!
What is it not finding? It isnt a select its an insert.
What is it not finding? It isnt a select its an insert.
Pro*C is just a program it is just applying macro processing to produce compilable c code.
If you havn't defined what to do WHENEVER NOT FOUND it is just expanding it's default rule into the c code.
You are supposing Pro*C is more sophisticated than it really is.
If you havn't defined what to do WHENEVER NOT FOUND it is just expanding it's default rule into the c code.
You are supposing Pro*C is more sophisticated than it really is.
From Oracle Docs
An INSERT can return NOT FOUND if no rows have been inserted.
An INSERT can return NOT FOUND if no rows have been inserted.
ASKER
Thanks Earthman - where did you find that in the Oracle Docs?
check out this link , it has a nice intro about how to execute sql inside proc*c:
http://www-db.stanford.edu/~ullman/fcdb/oracle/or-proc.html