【oracle】随笔
oracle数据类型
① char(size) 定长字符串,最多可以放2000个字符。
name char(32) 如果插入的数据少于32,那么就用空格来填充,如果多余32个,就报错。(一个中文字,占用两个字符空间),一个字符空间是使用一个字节来设计的。
② varchar2(size) 变长,最多可以存放4000个字符。
name(32) 如果插入数据少于32个,那么实际是多长就占用多长,剩余的空间就被回收了。如果超过32个字符,那么会自动增加存储空间。
如果以后要存储的数据是定长的,比如商品编号,身份证号,那么就使用char,不但约束了存储的长度,并且char的存储速度比varchar2快,如果存储的字符是变长的,那么就使用varchar来存储。
③ nchar(size) 定长,最长可以存储2000个字符
nchar采用的是unicode的编码方式。(一个中文字,占一个字符空间),因为一个字符空间是使用两个字节来设计的。
④ nvarchar2(size) 变长,最长可以存储4000个字符
采用unicode编码方式。
⑤ clob 变长,字符型大对象,最多可存储8TB
⑥ blob 变长,二进制数据,可以存放图片和视屏等
⑦ number(p,s) ,变长
可以存放整数和小数。
p:代表有效位 1 <= p <= 38
s:代表小数位 -84 <= s <= 127
保存数据范围:-1.0e-130 <= number < 1.0e+126
⑧ date 日期类型
按照日-月-年的方式存储的
insert into users vaues(‘12-11月-2017’);
comment (注释)
Oracle数据复库中 comment (注释) 修改方法:分两种情况,一种是表注释制,一种是字段注释。对表或表字段增加或修改注释内容的方法都是一样的。2113
一、表注释修改语法:comment on table 表名 is ‘注释内容5261’;
4102二、字段注释修改语法:comment on column 表名.字段名 is ‘注释内容’。
sql 语句NVL()用法
一NVL函数是一个空值转换函数
NVL(表达式1,表达式2)
如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。 该函数的目的是把一个空值(null)转换成一个实际的值。其表达式的值可以是数字型、字符型和日期型。但是表达式1和表达式2的数据类型必须为同一个类型。
对数字型: NVL( comm,0);
对字符型 NVL( TO_CHAR(comm), ‘No Commission’)
对日期型 NVL(hiredate,’ 31-DEC-99’)
例子:
select ename,NVL(TO_char(comm), ename||’ is not a salesperson!') AS COMMISSION
from emp
二 NVL2(表达式1,表达式2,表达式3)
如果表达式1为空,返回值为表达式3的值。如果表达式1不为空,返回值为表达式2的值。
例如 NVL2(comm,‘sal+comm’,sal)
NVL2函数测试comm
如果comm为空,就返回sal 的值。如果 comm 不为空(null),就返回表达式 sal+comm的值。
oracle 介绍 to_char(数据,FM999990.09) 格式化函数
其中 9 代表 如果存在数字则显示数字,不存在显示空格
其中 0 代表 如果存在数字则显示数字,不存在则显示0, 即占位符
其中 FM 代表 如果是因为9 带来的空格则删除
Oracle定义varchar2()类型存储汉字的长度问题
varchar2最大是4000字节,那么就看你的oracle字符集:(select userenv(‘language’) from dual;)
如果字符集是16位编码的,ZHS16GBK,那么每个字符16位,2字节,所以可以容纳2000字符。
如果是32位编码的字符集,那么只能存储 1000个字符。
例如:
varchar(50) 表示该字段类型为varchar2类型,长度为50,可以存单字节字符50个,如字母、数字等,可以存储双字节字符25个,如汉字。不同的是,若输入的不足,则以空格填充。
varchar2(50) 表示该字段类型为varchar2类型,长度为50,可以存单字节字符50个,如字母、数字等,可以存储双字节字符25个,如汉字。
nvarchar2(50)表示该字段类型为nvarchar2,长度为50,不论英文,数字,中文都能存50个。
修改字段的类型包括default设置
ALTER TABLE PB_PAIBANNEIRONG MODIFY paibanneirongleibie VARCHAR2(2) default’01’
ORACLE查询字段中含有空格的数据
select * FROM T_NAME WHERE instr(COLNAME,’ ‘)>0;–空格存在的位置大于0,即存在空格;
SELECT * FROM T_NAME WHERE REGEXP_LIKE(COLNAME, ‘( )+’);–只要有空格就可以检测出来;字符中含有空格的;
SELECT * FROM T_NAME WHERE length(COLNAME) > length(trim(COLNAME));–字符前边或后边是空格就可以检测出来;字符的长度>去空格后的长度;
SELECT * FROM T_NAME WHERE substr(COLNAME,-1)=’ ';–最后一个是空格可以检测出来;
oracle必有from关键字
在Oracle中select语句必须有from子句(SQL Server等可以不要from子句),如果没有实际的查询表,则可以使用dual作为from的目的表。
解除锁表
–查看锁表
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from vlockedobjectlo,dbaobjectsao,vlocked_object lo,
dba_objects ao,
vlockedobjectlo,dbaobjectsao,vsession sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
–根据查到的sql上面的 sess.sid, sess.serial#来更改锁表
alter system kill session ‘2562,34771’
解决oracle排序时按照汉字拼音排序不正确的问题
1.使用NLSSORT函数
在order by 时,转换一下汉字列为(NLSSORT(包含汉字的排序列,‘NLS_SORT =SCHINESE_PINYIN_M’))
eg:
SELECT T.I_NO, T.I_NAME
FROM TABLE1 T
ORDER BY NLSSORT(T.I_NAME,‘NLS_SORT =SCHINESE_PINYIN_M’)
参数说明:
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序
2.修改session中的NLS_SORT
alter session set NLS_SORT=‘SCHINESE_RADICAL_M’
更多推荐
所有评论(0)