Using dbms_output.get_line in VB.NET

后端 未结 3 1230
心在旅途
心在旅途 2021-01-29 03:47

I have some stored procedures to execute that use dbms_output.put_line() to put data into the output buffer.

I know I need to use dbms_output.get_line

3条回答
  •  灰色年华
    2021-01-29 03:59

    Here's how I got it to work: (found it here)

    Dim cmdGetOutput As New OracleCommand("declare " & _
        " l_line varchar2(255); " & _
        " l_done number; " & _
        " l_buffer long; " & _
        "begin " & _
        " loop " & _
        " exit when length(l_buffer)+255 > :maxbytes OR l_done =1; " & _
        " dbms_output.get_line( l_line, l_done ); " & _
        " l_buffer := l_buffer || l_line || chr(10); " & _
        " end loop; " & _
        " :done := l_done; " & _
        " :buffer := l_buffer; " & _
        "end;", cnOracle)
    cmdGetOutput.Parameters.Add("maxbytes", OracleType.Int16)
    cmdGetOutput.Parameters("maxbytes").Value = 32000
    cmdGetOutput.Parameters.Add("done", OracleType.Int16)
    cmdGetOutput.Parameters("done").Direction = ParameterDirection.Output
    cmdGetOutput.Parameters.Add("buffer", OracleType.LongVarChar, 32000)
    cmdGetOutput.Parameters("buffer").Direction = ParameterDirection.Output
    
    Dim strOutput As String = ""
    Dim intStatus As Integer = 0
    Try
       While True
          cmdGetOutput.ExecuteNonQuery()
          strOutput = strOutput & cmdGetOutput.Parameters("buffer").Value & vbNewLine
          If cmdGetOutput.Parameters("done").Value = 1 Then
             Exit While
          End If
       End While
    Catch ex As Exception
       MsgBox(ex.Message)
    Finally
       MsgBox(strOutput)
       cnOracle.Close()
    End Try
    

提交回复
热议问题