oracle数据库3

前端之家收集整理的这篇文章主要介绍了oracle数据库3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

创建一个可用的数据库
首先需要创建表空间

create tablespace to_orders datafile '磁盘地址' size 10m autoextend on --满后自动添加 ......

然后创建一个用户

create user a_oe identified by xxxx --密码
default tablespace xxxx ---一般需要指定已创建表空间

给创建的用户权限

grant connect,resource to a_oe grant select,update,delete,insert on 表名 to a_oe --用户名


存储过程概念:(来自百度知道)
枯燥杂乱的网文不给你转了,用我自己的词汇给你组织一下这个概念吧:

你可以把存储过程当做:把一系列语句合并到一起的这么一个整体

我觉得举例说明比较好,给你个例子:

先将【表1】中ID号为50—2000的记录删除
再将【表2】中的这些记录的状态(STATUS)改为“已解除”:

delete 表1 where ID > 50 and ID < 2000
update 表2 set STATUS = ‘已解除’ where ID > 50 and ID < 2000

正常情况下,以上两条语句分步执行就可以了,如果要用存储过程呢?

先建立存储过程(以下的语法为Sybase数据库的,其他数据库类同):

create procedure PRC_TEST (@start_ID int,@end_ID int)
as
begin
delete 表1 where ID > @start_ID and ID < @end_ID
update 表2 set STATUS = ‘已解除’ where ID > @start_ID and ID < @end_ID
end

好了,执行这个语句,就将存储过程PRC_TEST提交到数据库里了,它有两个参数:start_ID int 和 end_ID,代表起始和终止ID号,类型为整数型int

怎么用这个存储过程呢? 这样执行:exc PRC_TEST 50,2000

执行时,它先得到了两个参数,50、2000,分别赋值给start_ID int 和 end_ID,然后按照这两个参数分步执行封装在存储过程里的那两条语句了。

如果你这样执行:exc PRC_TEST 220,8660

就是处理两个表中ID介于220—8660之间的记录了。

你也许会问了,既然可以分步执行的几句sql,为什么要费力的写成存储过程啊?

主要是(我的经验和认识):

1、使数据处理参数化,对经常使用的一系列sql进行封装,使其成为一个存储过程的整体,在每次执行时只要更换执行参数即可,不用去改里面每句sql的where子句

2、★★这个很重要★★,假设你要循环处理某些数据,例如需要使用“游标”、“Do…while…语句”…………时,就要用到存储过程(或触发器)

=====================================================================

最后给你转一个短文吧,这是书面上的概念:
将常用的或很复杂的工作,预先用sql语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
那么存储过程与一般的sql语句有什么区别呢?
存储过程的优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般sql语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

创建一个储存过程

create or replace procedure find_smith( v_empno number ) is v_sal number(7,2) --将结果放进该变量中 begin select sal into v_sal from emp where empno=v_empno;
    dbms_output.putline('smith的工资是'||v_sal);
end;


数据库的范围分区:
create table orders3( id number(2) primary key,total_sal number(7,2),ord_date date ) partition by range(ord_date) ( partition p1 values less than(to_date('2014 10 6','yyyy-mm-dd')),partition p2 values less than(to_date('2015 10 6',partition p3 values less than(maxvalue) ) 

注意,要先建表再分区,不能直接分区,使用select * from user_tab_partition 来查看该用户一共建立了多少个分区

数据库的间隔分区

create table orders( id number(2) primary key,ord_date date ) partition by range(ord_date) interval(numtoyminterval(1,'YEAR')) --根据n的数值来分区,两年分一次,自动分区 ( partition p1 values less than(to_date('2014 10 6','yyyy-mm-dd')) )

注意间隔分区是根据numtoyminteval(n,’xxx’)中的n来说明分区间隔,xxx可以是YEAR,MONTH来说明是按年俩分区还是按照月来分区,分区过后的分区名是隐藏的,所以需要查看用户的分区名
使用select * from 表名partition(分区名)查询分区结果

原文链接:https://www.f2er.com/oracle/212533.html

猜你在找的Oracle相关文章