ORA-01036: illegal variable name/number

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • CJM

    ORA-01036: illegal variable name/number

    I'm trying to call a package/procedure in oracle (from an ASP page) which
    requires a number of parameters. I have got this working using OO40 but
    unfortunately the transaction rollback function doesnt seem to do much.

    So I'm now trying to use ADO instead (in the hope that ADO transactions will
    work), however I'm getting the above error. My initial searches havent
    turned up any suitable suggestions - there appear to be many reasons why
    this error might occur - none of which I have found so far fit my situation.

    Can anyone suggest where I am going wrong? Better still, can anyone post a
    working code snippet that I can use as a model? I already have another [very
    similar] function which calls a different package/procedure which works
    fine.

    Thanks in advance...

    CJM

    Code Snippets:

    PROCEDURE AddSerialToHist ory2(sSerialNo in varchar2, sPartNo in varchar2,
    sSequenceNo in number,
    sShopOrderNo in varchar2, sLineNo in varchar2, sRelNo in varchar2,
    sSuperiorSerial No in varchar2,
    sSuperiorPartNo in varchar2, sOrderType in varchar2, sHistoryPurpose in
    varchar2, sCurrentPositio n in varchar2,
    iResult Out number)
    IS
    sDesc Varchar2(100) := 'Received into stock against Shop Order ' ||
    sShopOrderNo || ', ' || sLineNo || ', ' || sRelNo;
    dtDate Date := CURRENT_DATE;
    Begin
    Insert Into IFSAPP.PART_SER IAL_HISTORY_TAB
    (Part_No, Serial_No, Sequence_No, Order_No, Line_No, Release_No,
    Transaction_Dat e,
    RowVersion, Transaction_Des cription, Order_Type, History_Purpose ,
    Current_Positio n, User_Created,
    Part_Ownership)
    Values
    (sPartNo, sSerialNo, sSequenceNo, sShopOrderNo, sLineNo, sRelNo,
    dtDate, dtDate, sDesc,
    sOrderType, sHistoryPurpose , sCurrentPositio n, 'IFSAPP', 'COMPANY
    OWNED');

    If SQL%ROWCOUNT = 1 Then
    iResult := 0;
    --Commit;
    Else
    iResult := 1;
    --Rollback;
    End If;
    END AddSerialToHist ory2;

    Function AddHistory (sSerialNo, sPartNo, sShopOrderNo, sLineNo, sRelNo,
    sSuperiorSerial No, sSuperiorPartNo )

    Dim iResult2

    Dim oParam
    With oCmd
    .CommandType=ad CmdText

    Set oParam = .CreateParamete r("sSerialNo" , adVarchar, adParamInput, 50,
    sSerialNo)
    .Parameters.App end oParam

    Set oParam = .CreateParamete r("sPartNo", adVarchar, adParamInput, 50,
    sPartNo)
    .Parameters.App end oParam

    'Set oParam = .CreateParamete r("sSequenceNo" , adSmallInt, adParamInput,
    50, 1)
    '.Parameters.Ap pend oParam

    Set oParam = .CreateParamete r("sShopOrderNo ", adVarchar, adParamInput,
    50, sShopOrderNo)
    .Parameters.App end oParam

    Set oParam = .CreateParamete r("sLineNo", adVarchar, adParamInput, 50,
    sLineNo)
    .Parameters.App end oParam

    Set oParam = .CreateParamete r("sRelNo", adVarchar, adParamInput, 50,
    sRelNo)
    .Parameters.App end oParam

    Set oParam = .CreateParamete r("sSuperiorSer ialNo", adVarchar,
    adParamInput, 50, sSuperiorSerial No)
    .Parameters.App end oParam

    Set oParam = .CreateParamete r("sSuperiorPar tNo", adVarchar, adParamInput,
    50, sSuperiorPartNo )
    .Parameters.App end oParam

    'Set oParam = .CreateParamete r("sHistoryPurp ose", adVarchar,
    adParamInput, 50, "INFO")
    '.Parameters.Ap pend oParam

    'Set oParam = .CreateParamete r("sCurrentPosi tion", adVarchar,
    adParamInput, 50, "InInventor y")
    '.Parameters.Ap pend oParam

    Set oParam = .CreateParamete r("iResult", adDecimal, adParamReturnVa lue)
    .Parameters.App end oParam

    'Insert row into SNE (Shop Order)
    .CommandText="{ Call ADDROWS.AddSeri alToCatalog(?, ?, 1, ?, ?, ?, ?, ?,
    'INFO', 'InInventory', ?)}"
    .Execute() '<======= this is where
    the error occurs

    AddHistory = .Parameters("iR esult").Value

    .Parameters.Del ete "sSerialNo"
    .Parameters.Del ete "sPartNo"
    .Parameters.Del ete "sSequenceN o"
    .Parameters.Del ete "sShopOrder No"
    .Parameters.Del ete "sLineNo"
    .Parameters.Del ete "sRelNo"
    .Parameters.Del ete "sSuperiorSeria lNo"
    .Parameters.Del ete "sSuperiorPartN o"
    .Parameters.Del ete "sHistoryPurpos e"
    .Parameters.Del ete "sCurrentPositi on"
    .Parameters.Del ete "iResult"

    End With

    End Function


  • Steve Howard

    #2
    Re: ORA-01036: illegal variable name/number

    Can anyone suggest where I am going wrong? Better still, can anyone post a
    working code snippet that I can use as a model? I already have another [very
    similar] function which calls a different package/procedure which works
    fine.
    >
    Thanks in advance...
    >
    CJM
    >
    I am willing to bet that this is an ADO issue in terms of how you are
    passing arguments. I would suggest getting a SQL*PLUS session (this is
    probably installed on the web server under the oracle directories) in
    the database, and manually running the procedure through that. If it
    works there, you have a mapping issue. Try something like ...

    variable iResult number

    exec AddSerialToHist ory2('test',
    'test',
    1,
    'test',
    'test',
    'test',
    'test',
    'test',
    'test',
    'test',
    'test',
    :iResult);

    print iResult

    ....in the SQLPLUS session I suggested.

    Regards,

    Steve

    Comment

    • DA Morgan

      #3
      Re: ORA-01036: illegal variable name/number

      CJM wrote:
      I'm trying to call a package/procedure in oracle (from an ASP page) which
      requires a number of parameters. I have got this working using OO40 but
      unfortunately the transaction rollback function doesnt seem to do much.
      Doesn't seem to do much ... means precisely what?
      So I'm now trying to use ADO instead (in the hope that ADO transactions will
      work), however I'm getting the above error.
      And that error, presumably, came with a line number. Use it to track
      down the offending line.
      --
      Puget Sound Oracle Users Group

      Comment

      • Steve Howard

        #4
        Re: ORA-01036: illegal variable name/number


        Steve Howard wrote:
        Can anyone suggest where I am going wrong? Better still, can anyone post a
        working code snippet that I can use as a model? I already have another [very
        similar] function which calls a different package/procedure which works
        fine.

        Thanks in advance...

        CJM
        I also noticed the procedure you are calling is not the one for which
        you have provided the definition. Are you sure they are the same?

        Comment

        • CJM

          #5
          Re: ORA-01036: illegal variable name/number


          "Steve Howard" <stevedhoward@g mail.comwrote in message
          news:1157567235 .973738.205690@ p79g2000cwp.goo glegroups.com.. .
          >
          >
          I also noticed the procedure you are calling is not the one for which
          you have provided the definition. Are you sure they are the same?
          >
          Sorry, I cut and paste the wrong function! It doesnt make much difference,
          since they are near identical.

          Update: I'n the meantime, I've re-created the package call from first
          principles, and it appears to be working. I'm not sure where the error lay,
          but clearly there was one in there some where.

          What is more, having moved away from OO4O to ADO, I now have transactions
          working! Hurray to Microsoft! I'm not sure why transactiosn didnt work in
          OO4O but it's academic now.

          Thanks for your help Steve.

          CJM



          Comment

          • CJM

            #6
            Re: ORA-01036: illegal variable name/number


            "DA Morgan" <damorgan@psoug .orgwrote in message
            news:1157567064 .560452@bubblea tor.drizzle.com ...
            CJM wrote:
            >I'm trying to call a package/procedure in oracle (from an ASP page) which
            >requires a number of parameters. I have got this working using OO40 but
            >unfortunatel y the transaction rollback function doesnt seem to do much.
            >
            Doesn't seem to do much ... means precisely what?
            >
            Unfortunately it means exactly what it says... I issued transactional
            commands against a database object which neither returned an error or did
            anything useful. Specifically, I couldnt rollback series of transactions; se
            my earlier thread 'OO4O Transactions: Updates not being rolled=back'.
            >So I'm now trying to use ADO instead (in the hope that ADO transactions
            >will work), however I'm getting the above error.
            >
            And that error, presumably, came with a line number. Use it to track
            down the offending line.
            The offending line was marked (perhaps not clearly enough) in my code
            snippet. Not surprisingly, it was at the point were the oracle package was
            called.

            Anyway, I've finally got it all working, and thankfully I have transactional
            control through ADO (see my reply to Steve).

            Thanks for your efforts anyway.

            CJM


            Comment

            • DA Morgan

              #7
              Re: ORA-01036: illegal variable name/number

              CJM wrote:
              >Doesn't seem to do much ... means precisely what?
              >>
              >
              Unfortunately it means exactly what it says... I issued transactional
              commands against a database object which neither returned an error or did
              anything useful. Specifically, I couldnt rollback series of transactions; se
              my earlier thread 'OO4O Transactions: Updates not being rolled=back'.
              Perhaps your driver, being Microsoft technology, is autocommitting so
              there is nothing to roll back.

              Try this simple test.

              INSERT ONE ROW
              ROLLBACK;
              COMMIT;

              Is the row committed or rolled back?
              --
              Daniel Morgan
              University of Washington
              Puget Sound Oracle Users Group

              Comment

              • Steve Howard

                #8
                Re: ORA-01036: illegal variable name/number


                CJM wrote:
                "Steve Howard" <stevedhoward@g mail.comwrote in message
                Sorry, I cut and paste the wrong function! It doesnt make much difference,
                since they are near identical.
                CJM
                It would make all the difference, actually, if they are only "near"
                identical.

                Look at the following...

                /*************** *************** *************** *************** *************** *************** ****

                ....create a simple procedure that receives two arguments and returns
                one as an OUT parameter to the caller...

                SQLCREATE OR REPLACE PROCEDURE ADDSERIALTOHIST ORY2 (p1 in number,
                2 p2 in number,
                3 iResult Out
                number) IS
                4 BEGIN
                5 iResult := p1 * p2;
                6 END;
                7 /

                Procedure created.

                ....and then run a simple vbs script that executes this procedure and
                echoes the results to the screen...

                SQL$type oracle_stored_p roc.vbs
                Set rs = CreateObject("A DODB.Recordset" )

                Set con = CreateObject("A DODB.Connection ")
                Set rs = CreateObject("A DODB.Recordset" )
                strsid = "test10g"
                strUser = "rep"
                strpassword = "rep"

                con.Open "Provider=MSDAO RA;" _
                & "Password=r ep;" _
                & "User ID=rep;" _
                & "Data Source=test10g; " _
                & "Persist Security Info=True"

                Set ocmd = CreateObject("A DODB.Command")

                ocmd.ActiveConn ection = con
                ocmd.CommandTyp e = 4
                ocmd.CommandTex t = "AddSerialToHis tory2"
                ocmd.Parameters .Append ocmd.CreatePara meter(, 3, 1)
                ocmd.Parameters .Append ocmd.CreatePara meter(, 3, 1)
                ocmd.Parameters .Append ocmd.CreatePara meter(, 3, 2)
                ocmd.Parameters .Append ocmd.CreatePara meter(, 4, 2)

                ocmd(0) = 2
                ocmd(1) = 2
                ocmd.Execute

                wscript.echo ocmd(2)

                SQL$cscript oracle_stored_p roc.vbs
                Microsoft (R) Windows Script Host Version 5.6
                Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

                4

                ....and then add a parameter to the command object (uncomment the fourth
                one in the example above), for which there is not a corresponding
                parameter in the oracle procedure definition...

                SQL$type oracle_stored_p roc.vbs
                Set rs = CreateObject("A DODB.Recordset" )

                Set con = CreateObject("A DODB.Connection ")
                Set rs = CreateObject("A DODB.Recordset" )
                strsid = "test10g"
                strUser = "rep"
                strpassword = "rep"

                con.Open "Provider=MSDAO RA;" _
                & "Password=r ep;" _
                & "User ID=rep;" _
                & "Data Source=test10g; " _
                & "Persist Security Info=True"

                Set ocmd = CreateObject("A DODB.Command")

                ocmd.ActiveConn ection = con
                ocmd.CommandTyp e = 4
                ocmd.CommandTex t = "AddSerialToHis tory2"
                ocmd.Parameters .Append ocmd.CreatePara meter(, 3, 1)
                ocmd.Parameters .Append ocmd.CreatePara meter(, 3, 1)
                ocmd.Parameters .Append ocmd.CreatePara meter(, 3, 2)
                ocmd.Parameters .Append ocmd.CreatePara meter(, 4, 2)

                ocmd(0) = 2
                ocmd(1) = 2
                ocmd.Execute

                wscript.echo ocmd(2)

                ....and voila, instant exception your script threw...

                SQL$cscript oracle_stored_p roc.vbs
                Microsoft (R) Windows Script Host Version 5.6
                Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

                C:\SCRIPTS\vbs\ oracle_stored_p roc.vbs(27, 1) Microsoft OLE DB Provider
                for Oracl
                e: ORA-01036: illegal variable name/number


                SQL>

                *************** *************** *************** *************** *************** *************** ***********

                The moral of the story is, if you ever get that error again, count your
                parameters, in both the caller and the oracle procedure.

                Regards,

                Steve

                Comment

                • CJM

                  #9
                  Re: ORA-01036: illegal variable name/number


                  "Steve Howard" <stevedhoward@g mail.comwrote in message
                  news:1157637504 .340063.218110@ h48g2000cwc.goo glegroups.com.. .
                  >
                  It would make all the difference, actually, if they are only "near"
                  identical.
                  >
                  Ok, obviously it would make a difference. What I was trying to say (but
                  glossing-over) was that the error was not with the general approach, because
                  the other similar routines work fine. It was with the specifics of the this
                  example, where I had presumably mis-typed something or had made a
                  syntactical mistake. When I recreated the code from scratch (using the same
                  knowledge and approach) it worked.

                  Going by your example (thanks, btw), I can only assume that the problem was
                  a similar mismatch between the parameters object and the procedure call.

                  Thanks

                  Chris


                  Comment

                  • Steve Howard

                    #10
                    Re: ORA-01036: illegal variable name/number


                    CJM wrote:
                    Ok, obviously it would make a difference. What I was trying to say (but
                    glossing-over) was that the error was not with the general approach, because
                    the other similar routines work fine. It was with the specifics of the this
                    example, where I had presumably mis-typed something or had made a
                    syntactical mistake. When I recreated the code from scratch (using the same
                    knowledge and approach) it worked.
                    >
                    I've done a *lot* worse :)

                    Regards,

                    Steve

                    Comment

                    • CJM

                      #11
                      Re: ORA-01036: illegal variable name/number


                      "DA Morgan" <damorgan@psoug .orgwrote in message
                      news:1157635391 .281487@bubblea tor.drizzle.com ...
                      CJM wrote:
                      >
                      Perhaps your driver, being Microsoft technology, is autocommitting so
                      there is nothing to roll back.
                      >
                      Initially, I was using OO4O which is a middleware layer from Oracle. Of
                      course, this will autocommit be default so there would be nothing to
                      rollback.

                      But I set the database object's Autocommit property to false and explicitly
                      started and rolled-back the transactions to no avail...
                      Try this simple test.
                      >
                      INSERT ONE ROW
                      ROLLBACK;
                      COMMIT;
                      >
                      Is the row committed or rolled back?
                      --
                      I tried something similar along the lines of:

                      AutoCommit = false
                      DB.BeginTrans
                      Insert Single Row
                      Rollback

                      Although OO4O never objected to the Rollback (ie no errors), it simply didnt
                      work - the rows were inserted anyway.


                      I moved across to ADO, and apart from the expected re-coding (although both
                      ADO and OO4O are very similar in approach), I had no problems at all.
                      Unfortunately, I'm using the MS ODBC For Oracle drivers, which have a
                      chequered history, so I would like to 'upgrade' to a better solution; either
                      a MS OLEDB driver or ideally the Oracle OLEDB driver which is included in
                      the same package as OO4O. Unfortunately, it doesnt seemt to have installed
                      correctly - at least, I can't see any Oracle OLEDB drivers shown in the ODBC
                      Administrator (the instant client and full client are listed though).

                      CJM


                      Comment

                      Working...