[export excel]Oracle Form導入sql查詢再導出CSV查詢結果( Using EXEC_SQL Package)
2011-01-27 15:30
429 查看
功能描述:一個簡單的Form,將調試好的SQL文本導入到Form文字框,再將SQL結果導出成CSV文件。
關鍵技朮:EXEC_SQL包的使用
FORM_DLL函數與EXEC_SQL包總結(摘自网頁):
![](http://hi.csdn.net/attachment/201101/27/852_12961123987OvV.jpg)
![](http://hi.csdn.net/attachment/201101/27/852_1296112403MhH2.jpg)
相關代碼:
[Import SQL Text] Button : WHEN-BUTTON-PRESSED
[OK] Button to export CSV file : WHEN-BUTTON-PRESSED
關鍵技朮:EXEC_SQL包的使用
FORM_DLL函數與EXEC_SQL包總結(摘自网頁):
一、FORMS_DDL函数 FUNCTION FORMS_DDL(statement VARCHAR2); 用于动态执行SQL语句与PL/SQL语句 注意事项: 1、参数statement的最大容量不能超过32K。 2、DDL类型的SQL语句,暗含一个commit命令。 二、EXEC_SQL包 用于动态执行DDL类型与DML类型的SQL语句。 EXEC_SQL包的一般使用步聚: 第一步:连接数据库: EXEC_SQL.Open_Connection /EXEC_SQL.Default_Connection 第二步:创建一个指针变量(游标): EXEC_SQL.Open_Cursor 第三步:为指针变量加载一个SQL语句(DDL、DML): EXEC_SQL.Open_Cursor 第四步:执行所加载一个SQL语句: EXEC_SQL.Execute 第五步:批量针变量(游标)与关闭数据库连接: EXEC_SQL.Is_Open、EXEC_SQL.Close_Cursor、EXEC_SQL.Close_Cursor、EXEC_SQL.Close_Cursor 三、总结 1、FORMS_DDL函数主要用于动态执行DDL类型的SQL语句(可以理解为因FORM中不能直接使用DDL类型的SQL语句。)。FORMS_DDL函数只能作用于当前FORM所连接的数据库。 2、EXEC_SQL包主要有两个重要用途: 第一:用于动态执行select语句并返回一个结果集。 第二:用于不同数据库之间数据访问。
![](http://hi.csdn.net/attachment/201101/27/852_12961123987OvV.jpg)
![](http://hi.csdn.net/attachment/201101/27/852_1296112403MhH2.jpg)
相關代碼:
[Import SQL Text] Button : WHEN-BUTTON-PRESSED
DECLARE dirname VARCHAR2(255); v_filename VARCHAR2(255); in_file Text_IO.File_Type; in_file_nm Text_IO.File_Type; in_file_nm2 Text_IO.File_Type; v_line VARCHAR2(1000); v_lines VARCHAR2(4000); BEGIN TOOL_ENV.GETVAR('TXT',DIRNAME); V_FILENAME:=GET_FILE_NAME(DIRNAME,NULL, 'SQL script (*.sql)|*.sql|' || 'ALL FILES (*.*)|*.*|' ); IF V_FILENAME IS NOT NULL THEN in_file_nm := Text_IO.Fopen( V_FILENAME,'r'); BEGIN loop Text_IO.Get_Line(in_file_nm, v_line); IF V_LINES IS NULL THEN V_LINES:=v_line; ELSE V_LINES:=V_LINES||' '||v_line; END IF; END LOOP; EXCEPTION WHEN no_data_found THEN Text_IO.Fclose(in_file_NM); END; :CON.SQL_DESC:=V_LINES; SYNCHRONIZE; TEXT_IO.FCLOSE(in_file_NM); END IF; END;
[OK] Button to export CSV file : WHEN-BUTTON-PRESSED
DECLARE T_SQL VARCHAR2(8000); T_ALT NUMBER; BEGIN IF :CON.SQL_DESC IS NULL OR :CON.FILE_PATH IS NULL THEN T_ALT := SHOW_ALERT('L_FILE'); GO_ITEM('CON.FILE_PATH'); ELSE T_SQL:=:CON.SQL_DESC; BEGIN LP_SAVE_EXCEL0(:CON.FILE_PATH,T_SQL); --output excel EXCEPTION WHEN OTHERS THEN --MESSAGE(T_SQL); MESSAGE('EXPORT EXCEL ERROR..'||SQLERRM); END; HOST('EXPLORER '||:CON.FILE_PATH); GO_BLOCK('CON'); END IF; END; ---------------------------------------------------------- PROCEDURE LP_SAVE_EXCEL0 (t_file varchar2, t_sql varchar2) IS connection_id EXEC_SQL.CONNTYPE default exec_sql.default_connection; cursorID EXEC_SQL.CURSTYPE; nIgn number; columnValue varchar2(10000); ncols number; sep varchar2(1); colName varchar2(1000); colLen number; coltype number; tmp varchar2(32767); file_nm text_io.file_type; BEGIN file_nm := text_io.fopen(t_file,'w'); --tmp := t_label||chr(13); --text_io.put(file_nm,tmp); tmp:=''; cursorID := EXEC_SQL.OPEN_CURSOR; BEGIN EXEC_SQL.PARSE(cursorID, t_sql, exec_sql.V7); nIgn := EXEC_SQL.EXECUTE(cursorID); EXCEPTION WHEN OTHERS THEN MESSAGE('EXEC SQL ERROR, PLEASE CHECK YOUR SQL SCRIPT.. '||SQLERRM); END; sep := ''; for i in 1 .. 100000 loop begin exec_sql.describe_column(connection_id, cursorId, i, colName, colLen, colType); exec_sql.define_column(cursorID, i, columnValue, 40000); --title tmp:= tmp || sep ||colName; sep := ','; exception when exec_sql.invalid_column_number then ncols := i-1; exit; end; end loop; --output title if (exec_sql.fetch_rows(cursorID) > 0) then tmp:=tmp||chr(10); text_io.put(file_nm,tmp); tmp:=''; end if; while (exec_sql.fetch_rows(cursorID) > 0) loop sep := ''; for i in 1 .. ncols loop EXEC_SQL.COLUMN_VALUE(cursorID, i, columnValue); tmp:= tmp || sep || columnValue; sep := ','; end loop; tmp:=tmp||chr(10); tmp:=convert(tmp,'ZHT16BIG5','UTF8'); text_io.put(file_nm,tmp); tmp:=''; END LOOP; text_io.fclose(file_nm); EXEC_SQL.CLOSE_CURSOR(cursorID); EXEC_SQL.CLOSE_CONNECTION; END;
相关文章推荐
- Python packages for CSV, EXCEL, Oracle DB, Greenplum, PostgresSQL, Cfg File
- 如何避免Oracle Form界面倒入.csv文件出现乱码
- oracle SQL*Plus出力csv
- oracle SQL*Plus出力csv
- 如何避免Oracle Form界面倒入.csv文件出现乱码
- ASP]在網頁中下SQL查詢.其結果轉成Excel檔
- 如何使用PL/SQL导入CSV文件到Oracle
- oracle sqlplus 导出csv文件
- Oracle 使用PL/SQL 读取CSV文件,将数据拆分到表中丢失数据行
- Oracle SQL*Plus .csv Export
- 招聘-Technical Manager-(PL/SQL, Oracle Form)-Beijing
- 使用SQL*Loader将CSV文件数据导入ORACLE数据表
- oracle使用sql脚本生成csv文件案例学习
- 在oracle中用sql脚本生成csv文件举例
- 使用SQL*Loader将CSV文件数据导入ORACLE数据表
- PL/SQL将txt(csv)文件导入数据到oracle
- 利用PL/SQL導出導入ORACEL資料庫里的資料
- oracle 查詢結果 統計排序
- [SQL]為查詢的結果加上序號(ROW_NUMBER,RANK,OVER)