设为首页 收藏本站
查看: 708|回复: 0

[经验分享] 将Access数据库移植到Oracle笔记

[复制链接]
YunVN网友  发表于 2016-8-13 06:18:11 |阅读模式
  开始移植工作的时候,尝试了很多自动转换工具,包括access通过odbc导出,csv导入等等,发现有一些问题: 例如得到字段类型转换不能满意,象Boolean被变成Char等等.后来开始自己写转换脚本.
  1 最简单的使用SQL插入.所有的表结构通过手工定义.
  <%@ LANGUAGE = VBScript CodePage = 936%>
<%
  dim ConnStr,conn1,conn2,Db
  Db = "olddb.mdb"
ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)
  Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.open ConnStr
  Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
 SqlPassword = "test"
 SqlUsername = "SYSTEM"
 SqlLocalName = "ORCL"
 ConnStr = "Provider = OraOLEDB.Oracle.1; Persist Security Info=True; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Data Source = " & SqlLocalName & ";"
  Set conn2 = Server.CreateObject("ADODB.Connection")
conn2.open ConnStr
  sql="select * from XXLX"
  Set rs1 = Server.CreateObject("ADODB.RecordSet")
rs1.Open SQL, Conn1, 1, 1
  DO WHILE NOT rs1.EOF
      sql = "insert into XXLX (" _
      & "XXLXID" & "," _
      & "BUMEN" & "," _
      & "XXLX" & ")" _
      &"values('"  _
   & rs1("XXLXID") & "','" _
   & rs1("BUMEN") & "','" _
   & rs1("XXLX") & "')"
  
   Response.Write sql & " "
          conn2.execute(sql)
   rs1.MoveNext
LOOP
  rs1.close
set rs1 = Nothing
  conn1.close
set conn1=nothing
  conn2.close
set conn2=nothing
  %>
  使用sql方式时候,要注意将字符串里面的'   " 转换掉.
  If rs1("FILENAME") <> "" Then
filename =  Replace(rs1("FILENAME"),"'","''")
filename =  Replace(filename,"""","""""")
Else
filename = ""
End If
  2 对于有些text字段很长,而oracle的SQL只能4000字的限制.将所有包含lob的字段通过ado 对拷的方式进行.
  <%@ LANGUAGE = VBScript CodePage = 936%>
<%
  dim ConnStr,conn1,conn2,Db,rs1,rs2
  Db = "db.mdb"
ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)
  Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.open ConnStr
  Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
 SqlPassword = "test"
 SqlUsername = "SYSTEM"
 SqlLocalName = "ORCL"
 ConnStr = "Provider = OraOLEDB.Oracle; Persist Security Info=True; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Data Source = " & SqlLocalName & ";"
  Set conn2 = Server.CreateObject("ADODB.Connection")
conn2.open ConnStr
  sql="SELECT * FROM MRCH ORDER BY ID ASC"
  Set rs1 = Server.CreateObject("ADODB.RecordSet")
rs1.Open SQL, Conn1,1,1
  sql="SELECT USERNAME USERNAME,ADDRESS ADDRESS,FILENAME FILENAME,INFO_TYPE INFO_TYPE,""DATE"" ""DATE"",TITLE TITLE,KEYWORD KEYWORD,SUMMARY SUMMARY,DOMAIN DOMAIN,DEPT DEPT,SENSITIVE SENSITIVE,SCBJ SCBJ,TIME TIME,JHXXLX JHXXLX FROM MRCH"
Set rs2 = Server.CreateObject("ADODB.RecordSet")
rs2.Open SQL, Conn2,1,4
  Dim i,tmp
i = 0
DO WHILE NOT rs1.EOF
      i= i+1
  rs2.AddNew
      rs2("USERNAME")=rs1("USERNAME")
      rs2("ADDRESS")=rs1("ADDRESS")
      rs2("FILENAME")=rs1("FILENAME")
      rs2("INFO_TYPE")=rs1("INFO_TYPE")
      rs2("DATE")=rs1("DATE")
      rs2("TITLE")=rs1("TITLE")
      rs2("KEYWORD")=rs1("KEYWORD")
      rs2("SUMMARY")=rs1("SUMMARY")
      rs2("DOMAIN")=rs1("DOMAIN")
      rs2("DEPT")=rs1("DEPT")
      rs2("SENSITIVE")=rs1("SENSITIVE")
      rs2("SCBJ")=rs1("SCBJ")
      rs2("TIME")=rs1("TIME")
      rs2("JHXXLX")=rs1("JHXXLX")
  Response.Write i & rs1("SUMMARY") & rs1("TIME") &"<br>"
     
     
   rs1.MoveNext
LOOP
  rs2.updatebatch
     rs2.close
      set rs2 = Nothing
  rs1.close
set rs1 = Nothing

  conn1.close
set conn1=nothing
  conn2.close
set conn2=nothing
  %>
  这里有三点要说明
  1 必须使用oracle自己的oledb,用ms的,有数据类型的问题
  2 所有的字段必须显示给出,否则oracle 会省略一些字段名: 例如info_type变成IN
  3 ADO记录必须用1 4打开,批处理模式

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-256870-1-1.html 上篇帖子: 基于Oracle数据库的数据分页原理 下篇帖子: oracle 存储过程的基本语法 及注意事项(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表