Re: Pro*C Dynamic SQL calling functions/procedures

From: <loyeah_at_gmail.com>
Date: Wed, 27 Feb 2008 19:03:09 -0800 (PST)
Message-ID: <54c81cb7-3941-48bb-bc8e-fd0b551cf890@s37g2000prg.googlegroups.com>


On Feb 14, 9:58 am, loy..._at_gmail.com wrote:
> Hi all,
>
> In the Pro*C code at the bottom, I was trying to execute a function
> that returns a cursor. However, as I would only know the exact name of
> the function during runtime, I tried to create a dynamic statement
> calling the function (by inserting the GroupName variable in front of
> the function name).
>
> /*    EXEC SQL EXECUTE BEGIN
>                 :cursor_2 :=
> DEFAULT_GET_SEQUENTIAL_TXNS(:txnSeqNumStart, :txnSeqNumMax);
>     END; END-EXEC; */
> The above works fine and gives me correct output:
> sql status: 0seq start: 10001seq max: 10009
> TXN SEQ NUM 2 [10386]; REC COUNT [10386] ; STATUS
> [Y                                 ]
> TXN SEQ NUM 2 [10436]; REC COUNT [10436] ; STATUS
> [Y                                 ]
> TXN SEQ NUM 2 [14486]; REC COUNT [14486] ; STATUS
> [N                                 ]
> TXN SEQ NUM 2 [15736]; REC COUNT [15736] ; STATUS
> [N                                 ]
> TXN SEQ NUM 2 [16036]; REC COUNT [16036] ; STATUS
> [N                                 ]
> TXN SEQ NUM 2 [16636]; REC COUNT [16636] ; STATUS
> [N                                 ]
> TXN SEQ NUM 2 [17386]; REC COUNT [17386] ; STATUS
> [N                                 ]
> TXN SEQ NUM 2 [18236]; REC COUNT [18236] ; STATUS
> [N                                 ]
> TXN SEQ NUM 2 [18586]; REC COUNT [18586] ; STATUS
> [N                                 ]
>
> But the dynamic sql one gives me the followings,
> sql status: 0seq start: 10001seq max: 10009
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
> TXN SEQ NUM 2 [0]; REC COUNT [0] ; STATUS []
>
> Not sure if there is any other workaround.
> Looking forward to getting your help.
> Thanks.
>
> My code
> **********
>         EXEC SQL BEGIN DECLARE SECTION;
>         char sqlCommand[MAX_SQL_COMMAND_SIZE];
>         long txnSeqNumStart;
>         long txnSeqNumMax;
>         long txnSeqNum;
>         char status[35];
>          int recCount;
>         SQL_CURSOR cursor_2;
>         EXEC SQL END DECLARE SECTION;
>
>         txnSeqNumStart = 10001;
>           txnSeqNumMax = 10009;
>
>         EXEC SQL ALLOCATE :cursor_2;
>
> /*    EXEC SQL EXECUTE BEGIN
>                 :cursor_2 :=
> DEFAULT_GET_SEQUENTIAL_TXNS(:txnSeqNumStart, :txnSeqNumMax);
>     END; END-EXEC; */
>
>         sprintf(sqlCommand, "BEGIN :v1 :=
> %s_GET_SEQUENTIAL_TXNS(:v2, :v3) ;END;", GroupName);
>
>         EXEC SQL PREPARE stmt FROM :sqlCommand;
>         EXEC SQL EXECUTE stmt
> USING :cursor_2, :txnSeqNumStart, :txnSeqNumMax;
>
>         for(int i=1 ;i<10;i++ )
>         {
>                 EXEC SQL FETCH :cursor_2
> INTO :txnSeqNum, :recCount, :status;
>                 cout << "TXN SEQ NUM 2 [" << txnSeqNum << "]; REC
> COUNT [" << recCount << "] ; STATUS ["  << status << "] \n";
>         }
>
>         EXEC SQL CLOSE :cursor_2;

Could anyone kindly help?
Thanks. Received on Wed Feb 27 2008 - 21:03:09 CST

Original text of this message