Sql 将DBMS.Output.put_行的输出写入指定的公共位置,如桌面

Sql 将DBMS.Output.put_行的输出写入指定的公共位置,如桌面,sql,oracle,utl-file,dbms-output,Sql,Oracle,Utl File,Dbms Output,我有一长串的电话,比如: DBMS|u输出.put|u行(v|u 1 | |','| v|u 2) 我只读取了数据库和invision的权限,并将上面语句中的ouptut写入了所有计算机上的一个公共位置,我以后可能会读取该位置(使用VBA) 我已经找到了Oracle似乎支持的软件包,但我很难理解如何让它实现我想要的功能 有人能给我举一个简单的例子,说明我如何使用put_line方法和UTL_文件packsage将数据写入一个公共位置,如计算机桌面?后台处理是一种SQL*Plus功能,用户可以在桌

我有一长串的电话,比如:

DBMS|u输出.put|u行(v|u 1 | |','| v|u 2)

我只读取了数据库和invision的权限,并将上面语句中的ouptut写入了所有计算机上的一个公共位置,我以后可能会读取该位置(使用VBA)

我已经找到了Oracle似乎支持的软件包,但我很难理解如何让它实现我想要的功能


有人能给我举一个简单的例子,说明我如何使用
put_line
方法和
UTL_文件
packsage将数据写入一个公共位置,如计算机桌面?

后台处理是一种SQL*Plus功能,用户可以在桌面上执行,而无需调用UTL_文件数据库包。Toad(利用SQL*Plus特性)也可以做到这一点

正如Justin Cave所评论的,UTL_文件是一个Oracle数据库包,用于读取和写入数据库服务器(例如11g文档)

此处记录了SQL*Plus的假脱机(与Oracle 11g数据库第3.1.7节相关)

您可以在TOAD中选择“作为脚本运行”,如下所示:

set serveroutput on
spool c:\temp.lst
begin
  dbms_output.put_line('My text');
end;
/
spool off
假脱机是一种客户端功能(SQL*Plus),因此,如果希望在过程中调用dbms_输出(下面,我称之为my_过程),我只需要创建一个驱动该过程的SQL脚本

可以将其作为sql脚本的内容(例如test_dbms_output.sql):

然后,您可以使用SQL*Plus run命令(或Toad中的“作为脚本运行”)调用此脚本:


utl_file
只能将数据写入数据库服务器文件系统(或数据库服务器可用的文件系统)上的文件。除非数据库服务器正在运行Windows,并且您的目标是在Windows数据库服务器的桌面上写入一个文件(这似乎很奇怪),否则您不能使用
utl_file
来执行此操作。如果要在客户端文件系统上创建文件,则需要在客户端上运行的程序。该客户端应用程序可以是SQL*Plus。它可能是您编写的东西。如果您所说的客户端应用程序就是这个意思,那么我使用的是Toad。我的问题是,每次运行涉及dbms_输出的过程时,我都希望输出自动保存在某个地方。但是,我看不到有任何Toad实用程序可以完成此任务。Toad有一个dbms_输出面板,当然有一个文件保存功能。这是否可以以过程形式实现,以便我每次运行它时都能完成?请参阅我关于sql脚本过程方法的附加说明。谢谢!我真的很感激!
SET serveroutput ON
spool c:\temp.lst
BEGIN
  my_procedure(params);
END;
/
spool OFF
@test_dbms_output.sql;
run test_dbms_output.sql;