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

14 浏览
0 Comments

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

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

请找到下面的查询

   声明
    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 ;
    开始
    打开tbl ;
         循环
         从tbl中获取view_name;
         当tbl%NOTFOUND时退出;
              v_str := 'Select '''|| view_name ||','' || count (*) from ' || view_name ;
              使用v_str动态执行 INTO v_output;
              DBMS_OUTPUT.PUT_LINE(v_output);
         结束循环;
    关闭tbl;
    结束;
**

当前输出:

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格式导出这个输出。

0
0 Comments

如何通过一个过程将输出以CSV格式导出的问题的出现原因和解决方法如下。

问题的出现原因:

用户想要将输出以CSV格式导出,但数据库默认不支持直接导出为CSV文件。

解决方法:

用户可以使用UTL_FILE包将输出写入到一个文本文件中,该文件将在数据库服务器上生成。

使用UTL_FILE的先决条件:

a. 创建一个指向数据库上物理位置的目录对象。

b. 确保正在使用的用户/模式对该位置具有读/写访问权限。

c. 确保UTL_FILE已安装在数据库上(以SYS用户运行utl_file),并授予执行UTL_FILE的权限给正在使用的账户。

UTL_FILE的伪代码:

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; --创建一个文件类型的变量

BEGIN

l_filehandle := utl_file.fopen(<directory_object>, <filename>, 'W'); --调用打开文件以进行写操作的函数

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); --实际写入文件的操作

END LOOP;

CLOSE tbl;

utl_file.Fclose(l_filehandle);

END;

希望这对您有帮助。

0