下面这个程序将数据库作业执行的结果(即查询语句p_puery执行的结果)导入文件中,但我希望写入文件中的除了有要查询的字段值,在文件的第一行还能写入字段名该怎么办?请各位大虾百忙之中抽出时间给予指点,谢谢!
CREATE OR REPLACE FUNCTION Writefile (
p_query IN VARCHAR2, /* 查询语句 */
p_separator IN VARCHAR2 DEFAULT ',' ,/* 列的分隔符 */
p_dir IN VARCHAR2, /* 文件生成目录 必须在UTL_FILE_DIR定义*/
p_filename IN VARCHAR2 /* 生成文件名*/
)
RETURN NUMBER
IS
l_output UTL_FILE.file_type;
l_thecursor INTEGER DEFAULT DBMS_SQL.open_cursor;
l_columnvalue VARCHAR2 (2000);
l_status INTEGER;
l_colcnt NUMBER DEFAULT 0;
l_separator VARCHAR2 (10) DEFAULT '';
l_cnt NUMBER DEFAULT 0;
l_id BINARY_INTEGER;
BEGIN
DBMS_SQL.parse (l_thecursor, p_query, DBMS_SQL.native);
FOR i IN 1 .. 255
LOOP
BEGIN
DBMS_SQL.define_column (l_thecursor, i, l_columnvalue, 2000);
l_colcnt := i;
EXCEPTION
WHEN OTHERS
THEN
IF (SQLCODE = -1007)
THEN
EXIT;
ELSE
RAISE;
END IF;
END;
END LOOP;
DBMS_SQL.define_column (l_thecursor, 1, l_columnvalue, 2000);
l_status := DBMS_SQL.EXECUTE (l_thecursor);
l_output := UTL_FILE.fopen (p_dir, p_filename, 'w');
LOOP
EXIT WHEN (DBMS_SQL.fetch_rows (l_thecursor) <= 0);
l_separator := '';
FOR i IN 1 .. l_colcnt
LOOP
DBMS_SQL.column_value (l_thecursor, i, l_columnvalue);
UTL_FILE.put (l_output, l_separator || l_columnvalue);
l_separator := p_separator;
END LOOP;
UTL_FILE.new_line (l_output);
l_cnt := l_cnt + 1;
END LOOP;
DBMS_SQL.close_cursor (l_thecursor);
UTL_FILE.fclose (l_output);
RETURN l_cnt;
END Writefile;
/