LONG: Req: Help in retrieving values from SQL Server stored procedure using Win32::ODBC 
Author Message
 LONG: Req: Help in retrieving values from SQL Server stored procedure using Win32::ODBC

Hi,

I'm attempting to write a script that will query a defect tracking
database
using a stored procedure, and then act on the returned value.  I've
been
able to create a DSN-less connection to the database and can execute
the
desired stored procedure, but I'm not having any luck getting a value
back
from there.

At the bottom is the text from a pretty lengthy file that details the
two routes I've tried so far - 1) using an output variable from the
sProc, and 2) using a RETURN value <- which seems to be working a bit
better (from the sql trace snippet I've included in the attached file.

I'm sure I'm making a mistake somewhere as I'm a Perl novice and have
no
experience with this whatsoever...which makes me pretty happy that
I've been
able to get this far on my own. :)

Any assistance is greatly appreciated!

Cheers,

-Bill Kalarness

William Kalarness

QA Coordinator
Esko-Graphics
Ludlow, Massachusetts  01056
Ph: +1 (413) 583-4134
Fax: +1 (413) 589-0990

*************************************************************
sProc code - using SQL OUTPUT variable
*************************************************************
CREATE PROC spEvaluateCR_ID_and_RecordType


AS


SELECT state FROM alpha.change_request cr


        BEGIN



        END
ELSE
        BEGIN








State */


        ELSE



        END

*************************************************************
Sample Perl Code - using SQL OUTPUT variable
*************************************************************
     $Status = "";
     $Connection = new Win32::ODBC("Driver={SQL
Server};Server=$Server;Database=$dbname;uid=$Uid;pwd=$Pwd") or die
"Cannot create new ODBC connection: $!";
     print "connected\n";
     $Status = $Connection->Sql("BEGIN " .


spEvaluateCR_ID_and_RecordType 'NewTT000770008' " .
                                   "EXEC
spEvaluateCR_ID_and_RecordType " .

# invalid ID entered


should return code 99
                                   "END ");
        $Connection->DumpData();
#        $Connection->FetchRow();
#        $Status = $Connection->Data;

       print "Status = $Status\n";
          if ($Status == 99) {
        print ("Invalid record ID. Status = $Status \n  Aborting\n");
     } elsif ($Status == 250) {
        print ("Record is in an invalid state. Status = $Status \n
Aborting\n");
#      } elsif ($Status == 1) {
#         print ("Success- Status = $Status \n");
     } else {
        print ("Unspecified fatal error.  Status = $Status \n
Aborting\n");
     }
    $Connection->Close();
      print "Connection closed\n";

*************************************************************
SQL Trace log - using SQL OUTPUT variable
*************************************************************
db_connect      6b4-6f4 ENTER SQLExecDirect
                HSTMT               01C12410


                SDWORD                   118

db_connect      6b4-6f4 EXIT  SQLExecDirect  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410


                SDWORD                   118

db_connect      6b4-6f4 ENTER SQLGetStmtOption
                HSTMT               01C12410
                UWORD                        9
                PTR                0x015D74D8

db_connect      6b4-6f4 EXIT  SQLGetStmtOption  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410
                UWORD                        9
                PTR                0x015D74D8

db_connect      6b4-6f4 ENTER SQLNumResultCols
                HSTMT               01C12410
                SWORD *             0x015D74D4

db_connect      6b4-6f4 EXIT  SQLNumResultCols  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410
                SWORD *             0x015D74D4 (1)

db_connect      6b4-6f4 ENTER SQLColAttributes
                HSTMT               01C12410
                UWORD                        1
                UWORD                        6 <SQL_COLUMN_DISPLAY_SIZE>
                PTR                0x00000000
                SWORD                        0
                SWORD *             0x00000000
                SQLLEN *            0x015DC484

db_connect      6b4-6f4 EXIT  SQLColAttributes  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410
                UWORD                        1
                UWORD                        6 <SQL_COLUMN_DISPLAY_SIZE>
                PTR                0x00000000
                SWORD                        0
                SWORD *             0x00000000
                SQLLEN *            0x015DC484 (11)

db_connect      6b4-6f4 ENTER SQLDescribeCol
                HSTMT               01C12410
                UWORD                        1
                UCHAR *             0x00000000
                SWORD                        0
                SWORD *             0x0140F916
                SWORD *             0x0140F922
                SQLULEN *           0x0140F8AC
                SWORD *             0x0140F916
                SWORD *             0x0140F916

db_connect      6b4-6f4 EXIT  SQLDescribeCol  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410
                UWORD                        1
                UCHAR *             0x00000000
                SWORD                        0
                SWORD *             0x0140F916 (0)
                SWORD *             0x0140F922 (4)
                SQLULEN *           0x0140F8AC (10)
                SWORD *             0x0140F916 (0)
                SWORD *             0x0140F916 (0)

db_connect      6b4-6f4 ENTER SQLBindCol
                HSTMT               01C12410
                UWORD                        1
                SWORD                        1 <SQL_C_CHAR>
                PTR                0x015DC4B0
                SQLLEN                    12
                SQLLEN *            0x015DC49C

db_connect      6b4-6f4 EXIT  SQLBindCol  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410
                UWORD                        1
                SWORD                        1 <SQL_C_CHAR>
                PTR                0x015DC4B0
                SQLLEN                    12
                SQLLEN *            0x015DC49C (0)

db_connect      6b4-6f4 ENTER SQLNumResultCols
                HSTMT               01C12410
                SWORD *             0x015D6518

db_connect      6b4-6f4 EXIT  SQLNumResultCols  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410
                SWORD *             0x015D6518 (1)

db_connect      6b4-6f4 ENTER SQLColAttributes
                HSTMT               01C12410
                UWORD                        1
                UWORD                        1 <SQL_COLUMN_NAME>
                PTR                0x0140F930
                SWORD                     1024
                SWORD *             0x0140FD30
                SQLLEN *            0x00000000

db_connect      6b4-6f4 EXIT  SQLColAttributes  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410
                UWORD                        1
                UWORD                        1 <SQL_COLUMN_NAME>
                PTR                0x0140F930
                SWORD                     1024
                SWORD *             0x0140FD30 (5)
                SQLLEN *            0x00000000

db_connect      6b4-6f4 ENTER SQLGetStmtOption
                HSTMT               01C12410
                UWORD                        9
                PTR                0x0140FD34

db_connect      6b4-6f4 EXIT  SQLGetStmtOption  with return code 0
(SQL_SUCCESS)
                HSTMT               01C12410
                UWORD                        9
                PTR                0x0140FD34

db_connect      6b4-6f4 ENTER SQLExtendedFetch
                HSTMT               01C12410
                UWORD                        1 <SQL_FETCH_NEXT>
                SQLROWOFFSET               1
                SQLROWSETSIZE *     0x0140FD38
                UWORD *             0x015DC4C8

db_connect      6b4-6f4 EXIT  SQLExtendedFetch  with return code 100
(SQL_NO_DATA_FOUND)
                HSTMT               01C12410
                UWORD                        1 <SQL_FETCH_NEXT>
                SQLROWOFFSET               1
                SQLROWSETSIZE *     0x0140FD38
                UWORD *             0x015DC4C8

*************************************************************
sProc code with RETURN Values
*************************************************************
CREATE PROC spEvaluateCR_ID_and_RecordType

AS


SELECT state FROM alpha.change_request cr


        BEGIN


        RETURN 99
        END
ELSE
        BEGIN








State */

                RETURN 250
        ELSE


                RETURN 1
        END

*************************************************************
Sample Perl Code - using SQL RETURN Value
*************************************************************
     $Status = "";
     $Connection = new Win32::ODBC("Driver={SQL
Server};Server=$Server;Database=$dbname;uid=$Uid;pwd=$Pwd") or die
"Cannot create new ODBC connection: $!";
     print "connected\n";
     $Status = $Connection->Sql("BEGIN " .
                                   "DECLARE
...

read more »



Tue, 19 Apr 2005 23:10:40 GMT  
 LONG: Req: Help in retrieving values from SQL Server stored procedure using Win32::ODBC
Hi,

I should have mentioned that this is under ActiveState Perl 5.6.0 -
Build 616 (?).

Thanks,

-Bill


Quote:

> Hi,

> I'm attempting to write a script that will query a defect tracking
> database
> using a stored procedure, and then act on the returned value.



Thu, 21 Apr 2005 20:08:09 GMT  
 
 [ 2 post ] 

 Relevant Pages 

1. ODBC, SQL Server, Stored Procedures

2. Perl Library to execute stored procedures in MS-SQL Server

3. ODBC, SQL Server, Stored Procedures

4. Using Embedded SQL vs Stored procedures in Perl DBI?DBD for Oracle

5. Using SQL stored procedure in Perl

6. Using SQL stored procedure

7. HELP: Need a little help on using PerlV5.003 with a Sybase stored procedure

8. HELP: Need a little help on using PerlV5.003 with a Sybase stored procedure

9. HELP: Need a little help on using PerlV5.003 with a Sybase stored procedure

10. SQL 2000 Stored procedure called from PERL not responding

11. Executing DEL and UPDT PL/SQL stored procedures from PERL

12. Executing DEL and UPDT PL/SQL stored procedures from PERL

 

 
Powered by phpBB® Forum Software