Oracle小白第一次折腾Oracle遇到的问题

来源:互联网 发布:js url转base64编码 编辑:程序博客网 时间:2024/06/01 18:37

最近给公司的一个项目配置程序,从测试的环境搬运到一个正式的环境(需要重新搭建),其中有个两个程序需要用到Oralce数据库:
1、程序一是从Oracle中读取数据,然后分析(分析时有日志打印),过后Update数据。
2、程序二是从Oracle中提取一部分数据,整体过后入库到sqlserver中。(这个是我编写的)

Oracle是由同事搭建的,我是负责部署程序。但是我部署程序后发现程序一和程序二都有问题。
1、程序一是分析过程时打印的日志中分析出来的数值是错误的。
原因是Oracle中创建的基础表没有数据,这里需要批量导入。
2、程序二是入库到sqlserver中的中文都是问号“???”。

碰到的问题如下描述:
1、Oracle中文显示为问号“????”的问题
这个问题是由于Oracle编码和sqlserver中使用的环境不一样导致。这个问题折腾了我半天,找了网上好多的办法,但是还是一样是问号。其实网上的方法是对的,但是不够全面。
以下是我总结的方法:
1、务必首先确认入库到Oracle中的需要使用的数据,中文不是问号。(这点很重要,不然后面的环境是配对了,你也会发现还是问号。)
2、确定一下Oracle中使用的 字符集:
首先安装一个odac。
然后安装一个“PLSQL Developer”,用于管理数据库。(当然搭建其它的也可以)。
然后使用PLSQL 连接上oracle,新建SQL窗口然后输入sql语句:select * from V$NLS_PARAMETERS 查看字符集,查看第一行value值
这里写图片描述
上图显示的是American,其实这里你不用担心是不是SIMPLIFIED CHINESE,你只要保证你后面使用的程序所在的环境中的系统的环境变量和上图的一致就可以,入如下图:
这里写图片描述

2、如何批量往Oracle表中导入数据
我从测试环境中导出数据生成的Sql脚本,想导入正式的环境,导入半天没有成功
一种方法:
使用sql语句批量导入,在头和尾加上begin,end:

BeginINSERT INTO "AreaDictionary" VALUES (0, '海南');INSERT INTO "AreaDictionary" VALUES (1, '澳门');INSERT INTO "AreaDictionary" VALUES (2, '香港');INSERT INTO "AreaDictionary" VALUES (3, '台湾');End;commit;

这样就可以。
务必记得commit,否则修改无效。

3、Oracle表名、字段名都是区分大小写的,不加双引号,Oracle会默认写成大写,就找不着对象,提示错误“表或视图不存在”
这个问题也是搞了我半天。
plsql里面重命名表,让Oracle识别大小的方法是加上双引号。

4、哪些操作需要commit?

oracle中有四类语言:  数据操纵语言DML(insertupdatedelete)  数据定义语言DDL(tableview,index,syn,cluster)                  create table/view/index/syn/cluster  数据查询语言DQL(selectfromwhere)  数据控制语言DCL(grant)  其中,DML语言需要COMMIT       DDL,DCL隐含COMMIT       DQL不需要COMMIT
0 0
原创粉丝点击