使用DBMS_OUTPUT.put_line使用Excelmacros

我在Oracle有一个数据库。 我已经使用以下代码成功地查询了它:

Sub AnalyzeDBATables() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim col As Integer Dim row As Integer Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open ( _ "User ID=" & _ ";Password=" & _ ";Data Source=" & _ ";Provider=MSDAORA.1") rs.Open "select * from dba_tables", cn col = 0 ' First Row: names of columns Do While col < rs.Fields.Count Cells(1, col + 1) = rs.Fields(col).Name col = col + 1 Loop ' Now actual data as fetched from select statement row = 1 Do While Not rs.EOF row = row + 1 col = 0 Do While col < rs.Fields.Count Cells(row, col + 1) = rs.Fields(col).Value col = col + 1 Loop rs.MoveNext Loop End Sub 

它似乎与简单的SQL语句一起工作。 然而,我的问题是从一些相当长的利用DBMS_OUTPUT.put_line PLSQL代码中检索数据。 我的结束数据以CSV值返回。

更明显的解决scheme可能是尝试在Oracle中将此输出转换为真正的表格,并使用带有上述代码的SELECT语句来获取它。 然而,我只是读了数据库,所以我真的需要能够收获的输出。

有没有办法从DBMS_OUTPUT.put_line收集响应,然后我可以在macros中parsing。 我甚至尝试了DBMS_OUTPUT.put_line('Hi');的简单收获DBMS_OUTPUT.put_line('Hi'); 但是我得到一个错误runtime error 3704

让我知道你的想法是什么!

生产数据库中的一个过程,其主要目的是写入dbms_output缓冲区,希望调用者分配这样一个缓冲区,它的大小足够大,并且调用者从缓冲区读取数据并对数据执行某些操作是非常糟糕的build筑方法。 dbms_output对于写出一些非常基本的debugging非常有用。 不应该依赖这个程序的主要目的。

也就是说,如果要读取写入dbms_output的数据,则需要使用dbms_output.get_linedbms_output.get_lines过程 。 在Excelmacros中,我期望您需要编写一个调用dbms_output.get_line的循环,直到返回的status为1。