Re: Oracle CASE statement precompile error in Micro Focus




The error is indicating that it has interpreted "CASE" as a column name - it
is therefore expecting what it is saying
a "," for the next column, a "FROM" to indicate the source or an "INTO"
where to put it (which doesn't make sense to me on the cursor declaration
but there goes). I would assume that this is not supported (at least with
the level of the precompiler that you have) though I _don't_ know this.

Why not just fetch "thing" and then in the code do the logic

IF "value='compare value'" THEN value = "other value".

I cannot think of many examples where this would be very difficult unless
your case statements are in temp tables you are
materializing as part of a subquery and so forth. If it is easy, I would do
it this way - depending on the circumstances, some may find it easier to
follow code logic versus sql logic. In my experience people don't take an
awful long time looking at the intricacies of the SQL before looking at the
"real" code.


Not a lot of help, but always point out the obvious first :-)

JCE

"Craig" <craig.essington@xxxxxxxxx> wrote in message
news:1122413976.136702.126550@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> We are converting our COBOL from DB2 to Oracle (also IBM z/OS to Micro
> Focus Server Express on Linux) but have run into an Oracle precompile
> issue: Two cursors that use the CASE statement in DB2. While I
> believe the CASE statement is not ANSI SQL, Oracle's documentation
> suggests it also supports (since 8i) the CASE statement in what appears
> to be the nearly the same format as DB2.
>
> To test that the error was due to the precompiler (and not the large
> complex cursor), I created a small, simple cursor:
>
> EXEC SQL
> DECLARE TEST_CURS CURSOR WITH HOLD FOR
> SELECT 'TESTING'
> , CASE
> WHEN (7 > 5)
> THEN 'TRUE'
> ELSE 'FALSE'
> END AS TEST_VAL
> FROM DUAL
> END-EXEC.
>
> However, when I precompile the COBOL program in Server Express with
> Oracle 10g, I get the following error suggesting an issue with the
> "WHEN" clause of the CASE statement:
>
>
> 606 EXEC SQL
> 607 DECLARE TEST_CURS CURSOR WITH HOLD FOR
> 608 SELECT 'TESTING'
> 609 , CASE
> Error at line 610, column 30 in file testprog.sks
> 610 WHEN (7 > 5)
> 610 .............................1
> 610 PCB-S-00400, Encountered the symbol "(" when expecting one of
> the following:
>
> , INTO FROM
>
> 611 THEN 'TRUE'
> 612 ELSE 'FALSE'
> 613 END AS TEST_VAL
> ^LPro*COBOL: Release 10.1.0.2.0 - Production on Tue Jul 26 16:29:16
> 2005
>
> Copyright (c) 1982, 2004, Oracle. All rights reserved.
>
> 614 FROM DUAL
> 615 END-EXEC.
>
>
>
> I also tried it without the enclosing parentheses, but with no luck.
> The error simply points to the "7" instead.
>
> I appreciate any help someone could provide on the topic and thanks in
> advance.
>
> Thanks,
> Craig
>


.



Relevant Pages

  • Re: Help: Is there any way I can catch the sql that calls the function from inside the function?
    ... > (l_data_input in varchar2) ... make your helpers' life easier by making sure the SQL is correct ... and telling us the Oracle version. ... Oracle doesn't have a concept of cursor parent and child in the sense ...
    (comp.databases.oracle.server)
  • Re: Performance problems with StoredProcedure in Web application
    ... you could probably just ignore my comments about stored procedure performance as compared to textual queries because they ... As for your question about how to avoid using a cursor (as I suggested was possible in Oracle) read the following paragraph for more ... The .NET Framework Data Provider for Oracle does not support batched SQL statements. ... CURSOR output parameters to fill a DataSet, ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Using Cursors
    ... There's no doubt that in Oracle cursors are invaluable. ... the data with separate SQL statments to acheive what I want. ... convert that I'm sure I couldn't do without a cursor. ... > DECLARE curEpisode SCROLL CURSOR FOR ...
    (microsoft.public.sqlserver.programming)
  • Re: Opinions on approach, please...
    ... Code conversion is much more tricky. ... to update more than 32k records without a commit in-between. ... I advise you to do cursor definitions on working storage). ... I don't want to see ANY SQL code in them. ...
    (comp.lang.cobol)
  • Re: Opinions on approach, please...
    ... to update more than 32k records without a commit in-between. ... Translating the above to SQL it would be as follows. ... I advise you to do cursor definitions on working storage). ... exec sql open file-a end-exec. ...
    (comp.lang.cobol)