Avatar billede kpdk Nybegynder
11. februar 2009 - 03:20 Der er 2 kommentarer og
1 løsning

Oracle stored procedure via VB

Dette spørgsmål lægger sig måske lidt over imod Oracle, men jeg tror ikke at det er dér problemet ligger siden den procedure, jeg tester med er

a) meget simpel
b) virker fint ved en manuel kørsel

Min Oracle connection virker fint og en alm. SELECT m.v. virker uden problemer.

Når jeg kører SP'en via VB.net (se Sub længere nede får jeg flg. fejl):

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "TT.TEST_PACKAGE", line 41
ORA-06512: at line 1

Kort fortalt, så har jeg leget mere med Oracle end jeg har med VB.net, så... sandssynligvis misser jeg ét eller andet. Jeg har følgende Sub som skal kalde SP'en - basically bare for at teste om det spiller:

    Public Sub InitializeUser(ByVal sUsername As String)
        Dim cmd As New OracleCommand()
        cmd.Connection = Me.Conn

        cmd.CommandText = "tt.test_package.get_user_info"
        cmd.CommandType = CommandType.StoredProcedure

        Dim initials As OracleParameter = New OracleParameter("i_username", OracleDbType.Varchar2)
        initials.Direction = ParameterDirection.Input
        initials.Value = sUsername
        MessageBox.Show(initials.Value) ' debug for at se værdi

        Dim fullname As OracleParameter = New OracleParameter("o_fullname", OracleDbType.Varchar2)
        fullname.Direction = ParameterDirection.Output

        Dim userrole As OracleParameter = New OracleParameter("o_role", OracleDbType.Varchar2)
        userrole.Direction = ParameterDirection.Output

        cmd.Parameters.Add(initials)
        cmd.Parameters.Add(fullname)
        cmd.Parameters.Add(userrole)

        cmd.ExecuteNonQuery()
        sFullname = fullname.Value
        sRole = userrole.Value
    End Sub

Her er min procedure, bare for god ordens skyld:

  PROCEDURE get_user_info(i_username IN VARCHAR2,
                                o_fullname OUT VARCHAR2,
                                o_role    OUT VARCHAR2) IS
  BEGIN
    SELECT u.fullname, u.userrole /* dette er linie 41 som "fejler" */
      INTO o_fullname, o_role
      FROM tt.users u
    WHERE u.username = i_username;
  END;



jeg håber nogen kan bringe mig på sporet.
Avatar billede arne_v Ekspert
11. februar 2009 - 04:05 #1
Det er jo svært at genskabe dit problem uden konteksten.

Men prøv og erstat:

        Dim fullname As OracleParameter = New OracleParameter("o_fullname", OracleDbType.Varchar2)
        fullname.Direction = ParameterDirection.Output

        Dim userrole As OracleParameter = New OracleParameter("o_role", OracleDbType.Varchar2)
        userrole.Direction = ParameterDirection.Output


med:

        Dim fullname As OracleParameter = New OracleParameter("o_fullname", OracleDbType.Varchar2, 100)
        fullname.Direction = ParameterDirection.Output

        Dim userrole As OracleParameter = New OracleParameter("o_role", OracleDbType.Varchar2, 100)
        userrole.Direction = ParameterDirection.Output

altså sætte en max længde på out parameterne (vælg en anden værdi end 100 hvis der er en bedre værdi).
Avatar billede kpdk Nybegynder
11. februar 2009 - 11:52 #2
Det virkede at tilføje ,100 som ekstra parameter til New OracleCommand(...), smid et svar Arne, og mange tak :)
Avatar billede arne_v Ekspert
11. februar 2009 - 13:42 #3
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester