客户端调用包以后,服务器检索数据,然后在服务器端生成CSV文件
在SQL*PLUS中试了一下,客户端可以用SPOOL生成,但是不知道在PL/SQL中怎么使用。
希望高手指点…………
还是很幼稚的问题…………
11 个解决方案
#1
utl_file
#2
SQL> select * from aa;
NAME
--------
20040501
10002000
create or replace procedure wfile
as
type my_cursor is ref cursor;
mycursor my_cursor;
myrecord aa%rowtype;
fileout utl_file.file_type;
begin
fileout := utl_file.fopen('e:\','aa.csv','w');
open mycursor for select * from aa;
loop
fetch mycursor into myrecord;
exit when mycursor%notfound;
utl_file.put_line(fileout,myrecord.name);
end loop;
close mycursor;
utl_file.fclose(fileout);
end;
/
过程已创建
SQL> exec wfile
PL/SQL 过程已成功完成。
E:\>more aa.csv
20040501
10002000
E:\>
NAME
--------
20040501
10002000
create or replace procedure wfile
as
type my_cursor is ref cursor;
mycursor my_cursor;
myrecord aa%rowtype;
fileout utl_file.file_type;
begin
fileout := utl_file.fopen('e:\','aa.csv','w');
open mycursor for select * from aa;
loop
fetch mycursor into myrecord;
exit when mycursor%notfound;
utl_file.put_line(fileout,myrecord.name);
end loop;
close mycursor;
utl_file.fclose(fileout);
end;
/
过程已创建
SQL> exec wfile
PL/SQL 过程已成功完成。
E:\>more aa.csv
20040501
10002000
E:\>
#3
得在初始化参数文件里指定UTL_FILE的目录,我是指定了E:\
#4
学习
#5
可以利用utl_file包,但是,在此之前,要注意设置好Utl_file_dir初始化参数
/**************************************************************************
parameter:textContext in varchar2 日志内容
desc: ·写日志,把内容记到服务器指定目录下
·必须配置Utl_file_dir初始化参数,并保证日志路径与Utl_file_dir路径一致或者是其中一个
****************************************************************************/
CREATE OR REPLACE PROCEDURE sp_Write_log(text_context VARCHAR2)
IS
file_handle utl_file.file_type;
Write_content VARCHAR2(1024);
Write_file_name VARCHAR2(50);
BEGIN
--open file
write_file_name := 'db_alert.log';
file_handle := utl_file.fopen('/u01/logs',write_file_name,'a');
write_content := to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss')||'||'||text_context;
--write file
IF utl_file.is_open(file_handle) THEN
utl_file.put_line(file_handle,write_content);
END IF;
--close file
utl_file.fclose(file_handle);
EXCEPTION
WHEN OTHERS THEN
BEGIN
IF utl_file.is_open(file_handle) THEN
utl_file.fclose(file_handle);
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END sp_Write_log;
/**************************************************************************
parameter:textContext in varchar2 日志内容
desc: ·写日志,把内容记到服务器指定目录下
·必须配置Utl_file_dir初始化参数,并保证日志路径与Utl_file_dir路径一致或者是其中一个
****************************************************************************/
CREATE OR REPLACE PROCEDURE sp_Write_log(text_context VARCHAR2)
IS
file_handle utl_file.file_type;
Write_content VARCHAR2(1024);
Write_file_name VARCHAR2(50);
BEGIN
--open file
write_file_name := 'db_alert.log';
file_handle := utl_file.fopen('/u01/logs',write_file_name,'a');
write_content := to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss')||'||'||text_context;
--write file
IF utl_file.is_open(file_handle) THEN
utl_file.put_line(file_handle,write_content);
END IF;
--close file
utl_file.fclose(file_handle);
EXCEPTION
WHEN OTHERS THEN
BEGIN
IF utl_file.is_open(file_handle) THEN
utl_file.fclose(file_handle);
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END sp_Write_log;
#6
如果没有这个目录或者是这个文件呢?会不会新建呢?
盼答
盼答
#7
没有这个目录是不行的
没有这个文件是没有关系的
FOPEN有3种打开模式
'w' 如果没有文件,新建,如果有,覆盖
'a' 如果没有文件,新建,如果有,添加数据
'r' 如果没有文件,不能读,如果有,读文件
没有这个文件是没有关系的
FOPEN有3种打开模式
'w' 如果没有文件,新建,如果有,覆盖
'a' 如果没有文件,新建,如果有,添加数据
'r' 如果没有文件,不能读,如果有,读文件
#8
大家已经说的很详细了,来晚了
#9
DECLARE
fileout utl_file.file_type;
BEGIN
fileout := utl_file.fopen(KEY_FOLDER_PATH,'kaikei.csv','W');
KEY_FOLDER_PATH 是传进来的参数
可以这样写吗?我这样做了,但是还是一到这句后就跳到异常部分
EXCEPTION
WHEN others THEN
………………
我在测试的时候,给KEY_FOLDER_PATH 赋值是‘c:\'
fileout utl_file.file_type;
BEGIN
fileout := utl_file.fopen(KEY_FOLDER_PATH,'kaikei.csv','W');
KEY_FOLDER_PATH 是传进来的参数
可以这样写吗?我这样做了,但是还是一到这句后就跳到异常部分
EXCEPTION
WHEN others THEN
………………
我在测试的时候,给KEY_FOLDER_PATH 赋值是‘c:\'
#10
能不能报告具体是什么异常阿?
#11
init.ora文件是放在哪里的?我怎一搜索搜索出3个呢?还有一长串数字作为后缀
是不是要在INIT.ORA中添加
UTL_FILE_DIR:=………………
这个参数??
是不是要在INIT.ORA中添加
UTL_FILE_DIR:=………………
这个参数??
#1
utl_file
#2
SQL> select * from aa;
NAME
--------
20040501
10002000
create or replace procedure wfile
as
type my_cursor is ref cursor;
mycursor my_cursor;
myrecord aa%rowtype;
fileout utl_file.file_type;
begin
fileout := utl_file.fopen('e:\','aa.csv','w');
open mycursor for select * from aa;
loop
fetch mycursor into myrecord;
exit when mycursor%notfound;
utl_file.put_line(fileout,myrecord.name);
end loop;
close mycursor;
utl_file.fclose(fileout);
end;
/
过程已创建
SQL> exec wfile
PL/SQL 过程已成功完成。
E:\>more aa.csv
20040501
10002000
E:\>
NAME
--------
20040501
10002000
create or replace procedure wfile
as
type my_cursor is ref cursor;
mycursor my_cursor;
myrecord aa%rowtype;
fileout utl_file.file_type;
begin
fileout := utl_file.fopen('e:\','aa.csv','w');
open mycursor for select * from aa;
loop
fetch mycursor into myrecord;
exit when mycursor%notfound;
utl_file.put_line(fileout,myrecord.name);
end loop;
close mycursor;
utl_file.fclose(fileout);
end;
/
过程已创建
SQL> exec wfile
PL/SQL 过程已成功完成。
E:\>more aa.csv
20040501
10002000
E:\>
#3
得在初始化参数文件里指定UTL_FILE的目录,我是指定了E:\
#4
学习
#5
可以利用utl_file包,但是,在此之前,要注意设置好Utl_file_dir初始化参数
/**************************************************************************
parameter:textContext in varchar2 日志内容
desc: ·写日志,把内容记到服务器指定目录下
·必须配置Utl_file_dir初始化参数,并保证日志路径与Utl_file_dir路径一致或者是其中一个
****************************************************************************/
CREATE OR REPLACE PROCEDURE sp_Write_log(text_context VARCHAR2)
IS
file_handle utl_file.file_type;
Write_content VARCHAR2(1024);
Write_file_name VARCHAR2(50);
BEGIN
--open file
write_file_name := 'db_alert.log';
file_handle := utl_file.fopen('/u01/logs',write_file_name,'a');
write_content := to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss')||'||'||text_context;
--write file
IF utl_file.is_open(file_handle) THEN
utl_file.put_line(file_handle,write_content);
END IF;
--close file
utl_file.fclose(file_handle);
EXCEPTION
WHEN OTHERS THEN
BEGIN
IF utl_file.is_open(file_handle) THEN
utl_file.fclose(file_handle);
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END sp_Write_log;
/**************************************************************************
parameter:textContext in varchar2 日志内容
desc: ·写日志,把内容记到服务器指定目录下
·必须配置Utl_file_dir初始化参数,并保证日志路径与Utl_file_dir路径一致或者是其中一个
****************************************************************************/
CREATE OR REPLACE PROCEDURE sp_Write_log(text_context VARCHAR2)
IS
file_handle utl_file.file_type;
Write_content VARCHAR2(1024);
Write_file_name VARCHAR2(50);
BEGIN
--open file
write_file_name := 'db_alert.log';
file_handle := utl_file.fopen('/u01/logs',write_file_name,'a');
write_content := to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss')||'||'||text_context;
--write file
IF utl_file.is_open(file_handle) THEN
utl_file.put_line(file_handle,write_content);
END IF;
--close file
utl_file.fclose(file_handle);
EXCEPTION
WHEN OTHERS THEN
BEGIN
IF utl_file.is_open(file_handle) THEN
utl_file.fclose(file_handle);
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END sp_Write_log;
#6
如果没有这个目录或者是这个文件呢?会不会新建呢?
盼答
盼答
#7
没有这个目录是不行的
没有这个文件是没有关系的
FOPEN有3种打开模式
'w' 如果没有文件,新建,如果有,覆盖
'a' 如果没有文件,新建,如果有,添加数据
'r' 如果没有文件,不能读,如果有,读文件
没有这个文件是没有关系的
FOPEN有3种打开模式
'w' 如果没有文件,新建,如果有,覆盖
'a' 如果没有文件,新建,如果有,添加数据
'r' 如果没有文件,不能读,如果有,读文件
#8
大家已经说的很详细了,来晚了
#9
DECLARE
fileout utl_file.file_type;
BEGIN
fileout := utl_file.fopen(KEY_FOLDER_PATH,'kaikei.csv','W');
KEY_FOLDER_PATH 是传进来的参数
可以这样写吗?我这样做了,但是还是一到这句后就跳到异常部分
EXCEPTION
WHEN others THEN
………………
我在测试的时候,给KEY_FOLDER_PATH 赋值是‘c:\'
fileout utl_file.file_type;
BEGIN
fileout := utl_file.fopen(KEY_FOLDER_PATH,'kaikei.csv','W');
KEY_FOLDER_PATH 是传进来的参数
可以这样写吗?我这样做了,但是还是一到这句后就跳到异常部分
EXCEPTION
WHEN others THEN
………………
我在测试的时候,给KEY_FOLDER_PATH 赋值是‘c:\'
#10
能不能报告具体是什么异常阿?
#11
init.ora文件是放在哪里的?我怎一搜索搜索出3个呢?还有一长串数字作为后缀
是不是要在INIT.ORA中添加
UTL_FILE_DIR:=………………
这个参数??
是不是要在INIT.ORA中添加
UTL_FILE_DIR:=………………
这个参数??