如何通过一种过程以CSV格式导出输出
如何通过一种过程以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格式导出这个输出。
如何通过一个过程将输出以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;
希望这对您有帮助。