搞了几天,终于把使用Oracle存储过程导入导出数据做成功了。现在分享一下,供大家共同进步。在这里我非常非常感谢“往事如梦”,以及“Oracle爱好者”上好友的帮助。
首先判断utl_file_dir的目录
SQL> show parameter utl_file_dir
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string C:\logmnr
修改utl_file_dir目录的方法:
在D:\oracle\product\10.2.0\db_1\database目录下的initSID.ora文件中添加utl_file_dir=C:\logmnr即可(也可修改为其它目录)
在这里以utl_file_dir=c:\logmnr为列子进行测试;
使用Oracle编写存储过程导出数据的存储过程为:
CREATEORREPLACEPROCEDURE"EXP_DATA"
(
P_QUERYINVARCHAR2,-- sql语句 例子: 'select * from TEST'
P_DIRINVARCHAR2,-- 目录 用这个命令查看目录show parameter utl_file_dir
P_FILENAMEINVARCHAR2-- 要生成的文件名
)
IS
L_OUTPUT UTL_FILE.FILE_TYPE;
L_THECURSORINTEGERDEFAULTDBMS_SQL.OPEN_CURSOR;
L_COLUMNVALUEVARCHAR2(4000);
L_STATUSINTEGER;
L_COLCNTNUMBER:=0;
L_SEPARATORVARCHAR2(1);
L_DESCTBL DBMS_SQL.DESC_TAB;
P_MAX_LINESIZENUMBER:=32000;
BEGIN
--OPEN FILE
L_OUTPUT:=UTL_FILE.FOPEN(P_DIR,P_FILENAME,'W',P_MAX_LINESIZE);
--DEFINE DATE FORMAT
EXECUTEIMMEDIATE'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS''';
--OPEN CURSOR
DBMS_SQL.PARSE(L_THECURSOR,P_QUERY,DBMS_SQL.NATIVE);
DBMS_SQL.DESCRIBE_COLUMNS(L_THECURSOR,L_COLCNT,L_DESCTBL);
--DUMP TABLE COLUMN NAME