Link to home
Start Free TrialLog in
Avatar of stummj
stummjFlag for United Kingdom of Great Britain and Northern Ireland

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
Avatar of seazodiac
seazodiac
Flag of United States of America image

stummj:

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 



I bet it's still some synax requirement you have not made it right ...
Avatar of stummj

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.
Avatar of stummj

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;
ASKER CERTIFIED SOLUTION
Avatar of earth man2
earth man2
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of stummj

ASKER

Amazing!!! OK That works ... but why!
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.
From Oracle Docs
An INSERT can return NOT FOUND if no rows have been inserted.
Avatar of stummj

ASKER

Thanks Earthman - where did you find that in the Oracle Docs?