Excel到具有较大数据集(> 2000条logging)的远程oracle数据库。 使用支持FetchSize的驱动程序存储proc调用

Public Const connString = "Provider=OraOLEDB.Oracle;FetchSize=200;CacheType=Memory;" & _ "Password=" & db_password & ";User ID=" & db_user & _ ";Data Source=" & db_source Sub GetEncyclopediaData() Dim MyConnection As New ADODB.Connection Dim MyResults As ADODB.Recordset Dim MyCommand As New ADODB.Command MyConnection.ConnectionString = connString MyConnection.Open MyCommand.ActiveConnection = MyConnection MyCommand.CommandType = adCmdStoredProc MyCommand.CommandText = "MKT_OWNER.ETP.p_ETPEncyclopedia" ' ETPEncyclopediaCommand.CommandType = adCmdText ' ETPEncyclopediaCommand.CommandText = "{ CALL MKT_OWNER.ETP.p_ETPEncyclopedia () }" MyCommand.Properties("PLSQLRSet") = True Set MyResults = MyCommand.Execute MyCommand.Properties("PLSQLRSet") = False While Not MyResults.EOF MyResults.MoveNext Wend End SubEnd Sub 

在存储过程模式下使用ADO时,只传递存储的过程名称作为文本:

 MyCommand.CommandType = adCmdStoredProc MyCommand.CommandText = "MKT_OWNER.ETP.p_ETPEncyclopedia" 

或者,在文本模式下,您可以传递查询:

 MyCommand.CommandType = adCmdText MyCommand.CommandText = "{ CALL MKT_OWNER.ETP.p_ETPEncyclopedia () }" 

不知道是否必须使用ADODB,但我个人更喜欢Oracle解决scheme:

 Dim OO4OSession As OraSession Set OO4OSession = New OraSessionClass Dim db As OraDatabase Set db = OO4OSession.OpenDatabase("DEV02", "dev/dev_demo", 0) db.Parameters.Add "CLIENT_ID", "1", ORAPARM_INPUT Dim ds As OraDynaset Set ds = db.CreateDynaset("SELECT NAME FROM CLIENT WHERE CLIENT_ID = :CLIENT_ID", 0) db.Close Set db = Nothing Set OO4OSession = Nothing 

良好的文件在这里是可用的