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, vlockedo​bjectlo,dbao​bjectsao,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’

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐