Oracle 如何通过过程以CSV格式导出输出

Oracle 如何通过过程以CSV格式导出输出,oracle,plsql,Oracle,Plsql,如何通过过程以CSV格式导出输出。我的输出存储在v_输出变量中 请在下面查询 Declare view_name VARCHAR2(200); v_str VARCHAR2 (1000); v_output VARCHAR2(4000); CURSOR tbl IS SELECT view_name FROM all_views WHERE OWNER = SYS_CO

如何通过过程以CSV格式导出输出。我的输出存储在v_输出变量中

请在下面查询

   Declare
    view_name     VARCHAR2(200);
    v_str          VARCHAR2 (1000);
    v_output     VARCHAR2(4000);
    CURSOR tbl IS
         SELECT view_name 
         FROM all_views
         WHERE OWNER = SYS_CONTEXT( 'USERENV', 'CURRENT_SCHEMA')
         ORDER BY 1 ;
    BEGIN
    OPEN tbl ;
         LOOP
         FETCH tbl INTO view_name;
         EXIT WHEN tbl%NOTFOUND;
              v_str := 'Select '''|| view_name ||','' || count (*) from ' || view_name ;
              EXECUTE IMMEDIATE v_str INTO v_output;

              DBMS_OUTPUT.PUT_LINE(v_output);
         END LOOP;
    CLOSE tbl;
    END;

**
电流输出:

V_DSP_BUSINESS_DATE,7
V_DSP_DEPARTMENT,0
V_DSP_EMPLOYEE_DEACTIVATED,515
V_DSP_EMPLOYEE_GED,0
V_DSP_EMP_DEPARTMENT,0

我想以CSV格式导出此输出。

您可以使用UTL_文件包写入平面文件,此文件将在数据库服务器上生成

使用UTL_文件的先决条件:

DECLARE
  view_name VARCHAR2 (200);
  v_str     VARCHAR2 (1000);
  v_output  VARCHAR2 (4000);
  CURSOR tbl IS
    SELECT   view_name
    FROM     all_views
    WHERE    owner = Sys_context ('USERENV', 'CURRENT_SCHEMA')
    ORDER BY 1;

l_filehandle utl_file.file_type%TYPE; --Create a Variable with  Filetype record
BEGIN
  l_filehandle := utl_file.fopen(<directory_object>, <filename>, 'W'); --Call to open the file for Write Operation
  OPEN tbl;
  LOOP
    FETCH tbl
    INTO  view_name;

    EXIT
  WHEN tbl%NOTFOUND;
    v_str := 'Select '
    || view_name
    || ',  count (*) from '
    ||view_name;
    EXECUTE IMMEDIATE v_str INTO v_output;
    utl_file.Put_line(l_filehandle,v_output); --Actual Writing of line infile
  END LOOP;
  CLOSE tbl;
  utl_file.Fclose(l_filehandle);
END;
a。创建指向数据库上物理位置的目录对象。 B确保您使用的用户/架构对此位置具有读/写访问权限 C确保在数据库上安装了UTL_文件(以SYS的形式运行UTL_文件),并将UTL_文件上的execute授予正在使用的帐户

UTL_文件的伪代码:

DECLARE
  view_name VARCHAR2 (200);
  v_str     VARCHAR2 (1000);
  v_output  VARCHAR2 (4000);
  CURSOR tbl IS
    SELECT   view_name
    FROM     all_views
    WHERE    owner = Sys_context ('USERENV', 'CURRENT_SCHEMA')
    ORDER BY 1;

l_filehandle utl_file.file_type%TYPE; --Create a Variable with  Filetype record
BEGIN
  l_filehandle := utl_file.fopen(<directory_object>, <filename>, 'W'); --Call to open the file for Write Operation
  OPEN tbl;
  LOOP
    FETCH tbl
    INTO  view_name;

    EXIT
  WHEN tbl%NOTFOUND;
    v_str := 'Select '
    || view_name
    || ',  count (*) from '
    ||view_name;
    EXECUTE IMMEDIATE v_str INTO v_output;
    utl_file.Put_line(l_filehandle,v_output); --Actual Writing of line infile
  END LOOP;
  CLOSE tbl;
  utl_file.Fclose(l_filehandle);
END;
声明
视图名称VARCHAR2(200);
v_str VARCHAR2(1000);
v_输出VARCHAR2(4000);
光标tbl为
选择视图名称
从各方面来看
其中owner=Sys\u context('USERENV','CURRENT\u SCHEMA')
1号订单;
文件句柄utl文件。文件类型%type--创建具有文件类型记录的变量
开始
l_filehandle:=utl_file.fopen(,'W')--调用以打开文件进行写入操作
开放式tbl;
环
取tbl
查看您的姓名;
出口
当tbl%未找到时;
v_str:=“选择”
||视图名称
||“,计数(*)自”
||视图名称;
在v_输出中执行立即v_str;
utl_文件.Put_行(l_文件句柄,v_输出)--行填充的实际写入
端环;
关闭tbl;
utl_file.Fclose(l_filehandle);
结束;

希望这会有所帮助

这是一个您将手动运行的特殊事件吗?我们将通过调度程序调用此过程。。。