Oracle学习 第23天 Oracle视图、表、SqlServer、excel、csv的互导
折腾了一晚,就弄了一张表。。。具体情况:远程Oracle上有一张视图,要弄回到公司服务器Oracle变成一张表
1、PL/SQL的导出
发现导出按钮灰色,找了一下Oracle客户端目录下的exp.exe没找着,网上下载了一下还是不行
可能是版本不对,可能是环境没装好,可能是权限不足,总之没法导出
2、打开服务器上的SqlServer,SELECT * FROM OPENQUERY(xx, 'SELECT * FROM x'),像普通表一样查出来,全选,右键,导出csv
3、导出的csv只有数据,没有表头(SQL 2005),只能SELECT INTO xx FROM (SELECT * FROM OPENQUERY(xx, 'SELECT * FROM x WHERE ROWNUM = 1')) T
生成一张表,然后生成建表脚本,拿到oracle去执行,让它报错,报一个改一个,批量替换成oracle的类型(如varchar2之类)
4、csv是逗号隔开的,要先用excel导入文本,把逗号作为分隔符变成一列一列
5、excel想导入PL/SQL,Data From TextFile,提示类似版本不对的东西,查了一下,系统是64位,ODBC是32位
6、要装64位的驱动,说已装了32位office,无法继续。只能先卸载了office,装64位驱动,再装office(仍是原先的)又可以
7、导入excel,发现原先导出的csv只有数据,没有表头,要在DataToOracle里一列列对应,几十列,对了一半,发现上下错位了一行,终于放弃
8、既然有表,那就SELECT * FROM xx FOR UPDATE;然后点编辑,复制数据进去
一开始复制错了,复制那种逗号分隔的源数据,卡死崩溃(也就一万两千行)
9、选中第一行第一列,复制列分隔的数据,卡死崩溃
10、选中第一列,复制粘贴,终于可以了,保存时提示NULL不能保存给DATE之类,明明是可空啊
11、把每列都改成varchar2算了,保存修改列,不成功,因为刚才复制数据还未提交。。。
12、全变成字符型的列,把数据复制进来,发现有些2-7这种格式,在转excel时变成【2月7号】了。。。转excel时要选文本
13、再从头弄一次,终于可以了
14、后来发现,直接SELECT * FROM XX出来的SqlServer结果集里,全选,直接就可以复制,不用转成csv弄来弄去的。
但这是放在剪切版里的,数据太大不合适,csv或excel比较通用
虽然绕了很多弯路,也摸索了一些门路,熟悉了套路。
Oracle的视图要转成表(因为换成另外服务器上,视图就没意义了),但没有权限又不能建表,只能用SqlServer中转
表结构最好能直接生成,不要弄个建表脚本。因为虽然是视图,终归是其它表的相应字段,也是有类型的
服务器之间不直接互通,不然也可以SELECT INTO之类的
Oracle还是要多实践