前言:
因为工作方向开始向数据处理转变,所以开始遇到很多数据库相关问题,很是花了些时间处理,所以觉得有必要记录一下。
正文:
年后开始使用kettle开发ETL流程。所谓的ETL,即(Extraction-Transformation-Loading),属于构建数仓必不可少的环节。这个以后再说。本次主要要谈Oracle这个数据库。前几年,因为自己所处的项目一直在用informix,加上自己对于数据库兴趣不大,所以对于最近接触的Oracle很是新鲜。Oracle应该说目前使用的频率还是蛮高的。虽然现在ke-value库很火热,但是关系数据库作为大学时就一直主教的库类型,其实还是占主要地位。尤其是一些历史比较悠久的项目,更可能用Oracle这样的关系数据库。另外这种项目如果是处于一个大的系统群内,随着业务不断累积,肯定会有数据处理的需求出现,这个时候构建数仓和数据集市我觉得已经是必然的一步了。下面谈谈最近遇到的Oracle相关问题。
1.Oracle的字段类型 CLOB与VARCHAR2 ,NUMBER和INT
CLOB可以看成C-LOB,LOB是Large Object(大字段)的意思。与C-LOB相对应的是B_CLOB。如果是存储二进制的大文件可以使用BCLOB。通常我们使用VARCHAR2存储字符类型。
但是它的最大长度是4000。所以如果需要大于4000字节长度的文本存储,可以是CLOB。
INT是NUMBER的子集,代表Number(22)的整数。另外 Number(x,y)写法中,y代表小数点后多少位,x代表长度。
2.报错 表名不存在 ;存在非法字符
报表名不存在,是因为建表时命名使用了"",并且表名使用了小写。在mybatis处理sql时,它会把表名转成大写字母,所以执行语句报表名不存在。解决办法就是重新建表后表名命名大写。
报存在非法字符,是因为sql语句后面使用了;号,而在使用mybatis执行语句时不需要加上这个;号。这是和你在plsqlldev里执行语句是不一样的。
3.mybtatis 连接Oracle 批量更新数据不生效,一直返回-1
这是因为如果按照如下配置,是需要另外在sqlsession执行时增加commit的操作。网上也有说可以通过设置defaultExecutorType 为simple解决,实际尝试仍是不行。

最后找到的解决办法是换种批量执行sql的写法,如下
use-generated-keys: true
5.给整型主键设置自增
首先 设置新的序列
Create Sequence
如下
create sequence S_S_DEPART
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;
定义好后 就在插入时使用该序列
例如 emp_sequence.CURRVAL
emp_sequence.NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
浙公网安备 33010602011771号