Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 数据库 / MySQL / Oracle与Access表之间的导入和导出

本文主要回答了如何在FORM的程序中实现Oracle与Access表之间的导入和导出这个问题。 问题的解答: 准备工作: 1.安装OCA。运行Developer的安装盘,选择自定义安装,选择Oracle Open Client Adapter for ODBC安装。 2.在数据源(ODBC)中添加DSN。控制面板->管理工具->数据源(ODBC),选择“用户DSN”,添加要进行操作的Access的文件。在“高级”选项里,填上“登录名称”和“密码”(很重要,在程序中会用到)。 下面以实际例子来说明: 假设在Oracle中和Access中都有一个student表,表中字段相同(name char(10) ,age number(2)),在准备工作第2步中的“数据源名”为test,“登录名称”和“密码”都为user。 下面为从Oracle导出到Access的PROCEDURE:
PROCEDUREoracle_to_accessISconnection_idEXEC_SQL.ConnType;action_cursorEXEC_SQL.CursType;ignorePLS_INTEGER;t_namestudent.name%type;t_agestudent.age%type;cursortemp_cursorisselect*fromstudent;BEGINconnection_id:=EXEC_SQL.OPEN_CONNECTION("user/user@odbc:test");action_cursor:=EXEC_SQL.OPEN_CURSOR(connection_id);EXEC_SQL.PARSE(connection_id,action_cursor,"delete*fromstudent");ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);EXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);opentemp_cursor;export_count:=0;action_cursor:=EXEC_SQL.OPEN_CURSOR(connection_id);EXEC_SQL.PARSE(connection_id,action_cursor,"INSERTINTOstudent(name,age)values(:1,:2)");loopfetchtemp_cursorintot_name,t_age;exitwhentemp_cursor%notfound;EXEC_SQL.BIND_VARIABLE(connection_id,action_cursor,":1",t_name);EXEC_SQL.BIND_VARIABLE(connection_id,action_cursor,":2",t_age);ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);endloop;closetemp_cursor;EXEC_SQL.PARSE(connection_id,action_cursor,"commit");ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);EXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);EXEC_SQL.CLOSE_CONNECTION(connection_id);EXCEPTIONWHENEXEC_SQL.PACKAGE_ERRORTHENIFEXEC_SQL.LAST_ERROR_CODE(connection_id)!=0THENmessage("数据导出至ACCESS失败:"||TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(connection_id))||":"||EXEC_SQL.LAST_ERROR_MESG(connection_id));ENDIF;IFEXEC_SQL.IS_CONNECTED(connection_id)THENIFEXEC_SQL.IS_OPEN(connection_id,action_cursor)THENEXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);ENDIF;EXEC_SQL.CLOSE_CONNECTION(connection_id);ENDIF;END;下面为从Access导出到Oracles的procedure:PROCEDUREAccess_to_oracleISconnection_idEXEC_SQL.ConnType;action_cursorEXEC_SQL.CursType;ignorePLS_INTEGER;t_namestudent.name%type;t_agestudent.age%type;BEGINconnection_id:=EXEC_SQL.OPEN_CONNECTION("user/user@odbc:test");action_cursor:=EXEC_SQL.OPEN_CURSOR(connection_id);deletefromstudent;EXEC_SQL.PARSE(connection_id,action_cursor,"selectname,agefromstudent");ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);exec_sql.define_column(connection_id,action_cursor,1,t_name,10);exec_sql.define_column(connection_id,action_cursor,2,t_age);ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);while(exec_sql.fetch_rows(connection_id,action_cursor)>0)loopexec_sql.column_value(connection_id,action_cursor,1,t_name);exec_sql.column_value(connection_id,action_cursor,2,t_age);insertintotest(name,age)values(t_name,t_age);endloop;commit;EXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);EXEC_SQL.CLOSE_CONNECTION(connection_id);EXCEPTIONWHENEXEC_SQL.PACKAGE_ERRORTHENIFEXEC_SQL.LAST_ERROR_CODE(connection_id)!=0THENmessage("数据导入至ORACLE失败:"||TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(connection_id))||":"||EXEC_SQL.LAST_ERROR_MESG(connection_id));ENDIF;IFEXEC_SQL.IS_CONNECTED(connection_id)THENIFEXEC_SQL.IS_OPEN(connection_id,action_cursor)THENEXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);ENDIF;EXEC_SQL.CLOSE_CONNECTION(connection_id);ENDIF;END;
注意:EXEC_SQL.BIND_VARIABLE中绑定的变量只能是以下三种类型:NUMBER,DATE,VARCHAR2。对于Access中的“是/否”的布尔型变量,可以用NUMBER类型的1和0来表示。如果Access中的表名或者字段名中有空格,在写SQL语句的时候可以用双引号把表名或者字段名包括起来,如:本例中如果Access中表名为student detail,字段名分别为student name和student age,那插入数据的SQL语句为:
insert into “student detail”(“student name”,”student age”) values(:1,:2)。
Oracle案例详细分析:Job任务停止执行在有注入漏洞的SQL服务器上运行CMD命令相关资讯      oracle  Access 
  • [INS-32052] Oracle基目录和Oracle  (07/22/2014 07:41:41)
  • Oracle 4个大对象(lobs)数据类型  (02/03/2013 12:33:05)
  • Oracle按时间段分组统计  (07/26/2012 10:36:48)
  • [Oracle] dbms_metadata.get_ddl的  (07/12/2013 07:37:30)
  • Liferay Portal 配置使用Oracle和  (07/31/2012 20:07:18)
  • Concurrent Request:Inactive   (07/20/2012 07:44:05)
本文评论 查看全部评论 (0)
表情: 姓名: 字数