Re: Oracle CASE statement precompile error in Micro Focus
- From: "jce" <defaultuser@xxxxxxxxxxx>
- Date: Wed, 27 Jul 2005 00:19:22 GMT
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
>
.
- Follow-Ups:
- References:
- Prev by Date: Re: "Shared" procedure division code
- Next by Date: Re: sequential file formats
- Previous by thread: Oracle CASE statement precompile error in Micro Focus
- Next by thread: Re: Oracle CASE statement precompile error in Micro Focus
- Index(es):
Relevant Pages
|