1、Oracle表的管理
Oracle 表的管理
表和列名的命名规则:
1. 必须以字母开头
2. 长度不能超过30个字符
3. 不能使用oracle的保留字
4. 只能使用如下字符 A-Z,a-z,0-9,$,#等
oracle 数据类型
字符型:
char 定长 最大2000字符;
varchar2(20) 变长 最大4000字符;
clob 字符型大对象 最大4G;
数字型
number(5)
number(5,2);
日期
date 包括年月日和时分秒
tiemstamp 精度更高
图片
blob 二进制数据 可以存放图片/声音 最大4G
创建表
create table student(xh number(4),xm varchar2(20),
2、oracle函数和存储过程有什么区别
1.返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有
2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用.
函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等)
参数的返回情况来看:
如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数;
从调用情况来看:
如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程,但调用存储函数的时候还有好多限制以及函数的纯度等级的问题.
如果是在过程化语句中调用的话,就要看你要实现什么样的功能。函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等),所以虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。
oracle函数和存储过程最大的区别就在于,函数必须带上一个return返回值,后面跟的是返回值的类型,而存储过程可以不带任何返回值。
另外,存储过程和函数同样支持in,out,in out这三种类型的参数,对应的是分别指明输入性的参数、输出型的参数、输入输出型的参数。也就是说如果我们需要返回多个值,除了可以使用存储过程来实现之外,也可以用函数来实现,方法是你将其中一个用return来返回,其他就指明该数据为out参数就可以了。
in,out,in out三种类型参数:
IN表示向存储过程传递参数(只传递到函数过程中,在函数过程中不会改变),OUT表示从存储过程返回参数(要求函数过程中赋值返回给调用界面的)。而IN OUT 表示传递参数和返回参数(即传递给函数过程,函数过程也可对其改变返回给调用的界面)
Oracle中存储过程和函数都可以返回值,但是函数必须要返回值,并一般只返回一个值,而存储过程则没有这个限制。从一般应用上来看,如果不需要返回值或者需要多个返回值,使用存储过程,如果只用一个返回值,就使用函数,从一般程序员的习惯上来看,这样更符合思维。
还有存储过程的命名最好以proc_打头,函数则是func_打头,变量则应该用v_打头,代码可以考虑缩进,增强可阅读性和美观度!
3、Oracle中取月份
今天碰到只要取月份和天数,如果月份前面有0要去掉0.比如说2010-01-08 ,需要的结果是1-8. 引出了一系列的sql语句
第一: 利用to_number的函数转换自动截0 select to_number(to_char(sysdate,'mm‘))||'-'||to_number(to_char(sysdate,'dd’)) from dual;
第二: 利用ltrim函数加固定参数去掉0 select ltrim(to_char(sysdate,'mm‘),'0’)||'-'||ltrim(to_char(sysdate,'dd‘),'0’) from dual;
上面两种方法实现了我们所需要的,共同的特点是都用到两个函数了,但有没有更简单的方法呢 ? 我猜有的人肯定就想到了oracle是不是有这样的格式呢 select to_char(sysdate,'m-d‘) from dual; 很可惜,提示错误,日期格式不存在 .不要灰心,我们继续…
第三:利用函数的特性。
我们知道 select sysdate from dual ; 得到的值是:2010-1-8 11:06:18 那有没有函数直接获取到月份1和日8,
我们的猜测是正确的,确实有这样的函数,出现了下面的函数,
select extract(month from sysdate) ||'-'|| extract(day from sysdate) month from dual;
注意: extract 具体的用法找'google’吧 ,不会让你失望的。 又近了一步,满足了吧,不要满足了,下面还有。
上面的方法有一个共同的特征,就是月和日都是分开取的,怎么样才能 合并到一起去,这样多好啊 !
看我们的第四种方法:
第四:巧用oracle自带的格式 select to_char(sysdate,'fmmm-dd‘) from dual;
ps:the format_mask parameter begins with “FM”. This means that zeros and blanks are suppressed