Access教程 sql server教程 MySQL教程 DB2教程
  • ORACLE教程
  • 当前位置:教程 > 数据库 > ORACLE教程 > 正文

    Oracle与Access表之间的导入和导出

    编辑:教程网 来源:网络 时间:2011年11月04日 16:42
    IT产品库 http://www.websmill.com 本文主要回答了如何在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/[email protected]: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/[email protected]: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;
  • 原文来自 教程网 转载请注明:http://www.websmill.com/shujuku/ORACLE/31334.html

  • 上一篇:Oracle冷备份的不完全恢复(二)
  • 下一篇:遇到ora-12535问题后应当采用哪些方法解决
  • 相关阅读
  • 用分割DMP的方法导入和导出大型ORACLE数据库
  • 怎样自动将数据导入 Oracle数据库
  • oracle的文本导入、导出技巧
  • FORM程序中Oracle与Access表的导入和导出
  • 判断Oracle的两个Undo日志之间的时间间隔
  • Oracle817 版本 不同字符集之间的数据库导入
  • IT译文:Oracle与SQL Server之间的选择
  • 详细讲解如何给导入文件加上时间戳标记
  • Oracle导出数据库结构到PowerDesigner
  • [Oracle]探讨数据库的数据导入方法