例如:
create or replace procedure bhd(err   out VARCHAR2,
                                           ret   out VARCHAR2,
                                           itemid  number,
                                           dn      VARCHAR2,
                                           status  VARCHAR2,
                                           quantity_mfg  number,
                                           vendor1 VARCHAR2,
                                           vendor2 VARCHAR2,
                                           vendor3 VARCHAR2,
                                           vendor4 VARCHAR2) is  g_org_id number := 84;end bhd;
/以上过程itemid,dn,status,quantity_mfg,vendor1,vendor2,vendor3,vendor4是已知的,请教在VB中怎么样调用才能取出变量err和ret的值

解决方案 »

  1.   

    例子:
    存储过程:
    CREATE OR REPLACE PROCEDURE prc_Call_From_VB(pVar1 VARCHAR2, pVar2 VARCHAR2, pAll OUT VARCHAR2) IS
    BEGIN
      pAll := pVar1 || pVar2;
    END prc_Call_from_VB;VB代码:
    Private Sub cmdCallPrc_Click()
    On Error GoTo cmdCallPrcErr:
        Dim cnn As New ADODB.Connection
        Dim rst As New ADODB.Recordset
        Dim cmd As New ADODB.Command
        
        cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=chanet;Persist Security Info=True;User ID=chanet;Data Source=oradb"
        cnn.Open
        
        With cmd
            .ActiveConnection = cnn
            .CommandType = adCmdText
            .CommandText = "{CALL prc_Call_From_VB(?,?,?)}"
            .Parameters.Append .CreateParameter("var1", adVarChar, adParamInput, 100, "测试......")
            .Parameters.Append .CreateParameter("var2", adVarChar, adParamInput, 100, "成功.")
            .Parameters.Append .CreateParameter("v_all", adVarChar, adParamOutput, 100)
        End With
        
        rst.CursorType = adOpenStatic
        rst.LockType = adLockReadOnly
        Set rst.Source = cmd
        rst.Open
        
        MsgBox cmd.Parameters.Item("v_all")    Set rst = Nothing
        Set cmd = Nothing
        Exit SubcmdCallPrcErr:
        Set cmd = Nothing
        Set rst1 = Nothing
        MsgBox Err.Description
    End Sub
      

  2.   

    楼上老兄 你上面的过程根本取不出来值呀 顺便问一下你的rst是干吗用的呀 怎么 rst.Open的时候总报错呀
      

  3.   

    存储过程建了没有?连接字符串改了没有?
     cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=chanet;Persist Security Info=True;User ID=chanet;Data Source=oradb"请麻烦你把报错的信息完整地贴上来~
      

  4.   

    楼上哥们 
    例子:
    存储过程:
    CREATE OR REPLACE PROCEDURE prc_Call_From_VB(pVar1 VARCHAR2, pVar2 VARCHAR2, pAll OUT VARCHAR2) IS
    BEGIN
      pAll := pVar1 || pVar2;
    END prc_Call_from_VB;VB代码:
    Private Sub cmdCallPrc_Click()
    On Error GoTo cmdCallPrcErr:
        Dim cnn As New ADODB.Connection
        Dim rst As New ADODB.Recordset
        Dim cmd As New ADODB.Command
        
        cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=chanet;Persist Security Info=True;User ID=chanet;Data Source=oradb"
        cnn.Open
        
        With cmd
            .ActiveConnection = cnn
            .CommandType = adCmdText
            .CommandText = "{CALL prc_Call_From_VB(?,?,?)}"
            .Parameters.Append .CreateParameter("var1", adVarChar, adParamInput, 100, "测试......")
            .Parameters.Append .CreateParameter("var2", adVarChar, adParamInput, 100, "成功.")
            .Parameters.Append .CreateParameter("v_all", adVarChar, adParamOutput, 100)
        End With
        
        rst.CursorType = adOpenStatic
        rst.LockType = adLockReadOnly
        Set rst.Source = cmd
        rst.Open
        
        MsgBox cmd.Parameters.Item("v_all")    Set rst = Nothing
        Set cmd = Nothing
        Exit SubcmdCallPrcErr:
        Set cmd = Nothing
        Set rst1 = Nothing
        MsgBox Err.Description
    End Sub
    错误提示信息
    ORA-06550: 第 1 行, 第 7 列: 
    PLS-00201: 必须说明标识符 'PRC_CALL_FROM_VB'
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    我把你写的存储过程复制到 方案SYS下
      

  5.   

    参数类型没什么问题 不知道权限上能有什么问题 DBMSSTDX.SQL我运行了 我用SYS登陆的在相关的存储过程上也给DBA付EXECUTE的权限了 请问楼上哥们别的什么地方会有关系呀