CMD.CommandText = "{call ceshiname.getname()}"  
好象只能调存储过程吧.包和包内的过程能否直接被调用?

解决方案 »

  1.   

    ADO 连 Oracle 中有到用返回游标的话,要加上 Extended Properties=PLSQLRSet=1 在连接串里.
    如: 在 VB 里返回游标的例子:
    PL/SQL 代码:
    CREATE OR REPLACE PACKAGE "PKG_TEST" AS
           TYPE myrcType IS REF CURSOR;
           FUNCTION get(strSQL VARCHAR) RETURN myrcType;
    END pkg_test;CREATE OR REPLACE PACKAGE BODY "PKG_TEST" AS
        FUNCTION get(strSQL IN VARCHAR) RETURN myrcType IS
          rc myrcType;
        BEGIN
          OPEN rc FOR strSQL;
          RETURN rc;
        END get;
    END pkg_test;VB 代码:
    Private Sub Command1_Click()
    On Error GoTo cursorErr:
        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=tiger;Persist Security Info=True;User ID=scott;Data Source=oraAny;Extended Properties=PLSQLRSet=1"
        cnn.Open
        
        With cmd
            .ActiveConnection = cnn
            .CommandType = adCmdText
            .CommandText = "{CALL scott.pkg_test.get(?)}"
            .Parameters.Append .CreateParameter("strSQL", adVarChar, adParamInput, 100, "SELECT * FROM TAB")
        End With
        
        rst.CursorType = adOpenStatic
        rst.LockType = adLockReadOnly
        Set rst.Source = cmd
        rst.Open
        
        MsgBox rst.RecordCount    Set rst = Nothing
        Set cmd = Nothing
        Exit SubcursorErr:
        Set cmd = Nothing
        Set rst1 = Nothing
        MsgBox Err.Description
    End Sub