select * from user_tables;
drop table t_user_role;
drop table t_user;
drop table t_role;
drop sequence user_seq;
create sequence user_seq--建立序列(自动增长列)
increment by 1 --自增系数
start with 1 --初始值
--maxValue 最大值,noMaxValue 无最大值
--minValue 最小值,nominValue 无最小值
--cycle 循环取值 ,nocycle 不循环取值
--cache 缓冲区
;
create table t_user
(
userId number(10) primary key,
userName varchar2(16) not null
);
insert into t_user values(user_seq.nextval,'good');
insert into t_user values(user_seq.nextval,'haha');
insert into t_user values(user_seq.nextval,'flyCat');
insert into t_user values(user_seq.nextval,'fullCat');
select * from t_user;
select user_seq.currval from dual;
create table t_role(
roleId number(10) primary key,
roleName varchar(16) not null
)
partition by hash(roleId) --散列分区
partitions 2 --分区数目
--分区方式2(自己指定分区名)
--partition by hash( roleId )
--(
-- partition role_p1,
-- partition role_p2
--);
;
insert into t_role values(user_seq.nextval,'一级');
insert into t_role values(user_seq.nextval,'二级');
insert into t_role values(user_seq.nextval,'三级');
insert into t_role values(user_seq.nextval,'四级');
select * from t_role;
create table t_user_role
(
infoId number(10) primary key,
userId number(10) not null,
roleId number(10) not null,
remark varchar2(16) not null,
foreign key (userId) references t_user(userId),
foreign key (roleId) references t_role(roleId)
)
partition by range(infoId)--范围分区
subpartition by list(userId) --这里用到复合分区,首先必须是范围分区,然后是列表分区
(
partition p1 values less than(100)
(
subpartition p1s1 values(1),
subpartition p1s2 values(3),
subpartition p1s3 values(default)--剩下的结果存放在这里
),
partition p2 values less than(200)
(
subpartition p2s1 values(2),
subpartition p2s2 values(4),
subpartition p2s3 values(default)
),
partition p3 values less than(maxvalue)
(
subpartition p3s1 values(default)
)
);
insert into t_user_role values(user_seq.nextval,1,5,'手动输入');
insert into t_user_role values(user_seq.nextval,1,6,'手动输入');
insert into t_user_role values(user_seq.nextval,1,7,'手动输入');
insert into t_user_role values(user_seq.nextval,1,8,'手动输入');
insert into t_user_role values(user_seq.nextval,2,5,'手动输入');
insert into t_user_role values(user_seq.nextval,2,6,'手动输入');
insert into t_user_role values(user_seq.nextval,4,5,'手动输入');
select * from t_user_role;
create public t_u_r for t_user_role;--创建同义词
select * from t_u_r;
--联合查询
select tur.infoId as id, tu.userName as userName,tr.roleName as roleName from t_u_r tur,t_user tu,t_role tr where tur.userId = tu.userId and tur.roleId = tr.roleId;
--创建视图
create view v_info as select tur.infoId as id, tu.userName as userName,tr.roleName as roleName from t_u_r tur,t_user tu,t_role tr where tur.userId = tu.userId and tur.roleId = tr.roleId;
select * from v_info;
create view v_info(id ,userName,roleName) as select tur.infoId as id, tu.userName as userName,tr.roleName as roleName from t_u_r tur,t_user tu,t_role tr where tur.userId = tu.userId and tur.roleId = tr.roleId;
select * from v_info;
--创建索引
create index ind_info on t_u_r(remark);
create inde1,m v_now; ind_info2 on t_u_r(userId,roleId,remark);--组合索引
create unique index i1,m v_now;d_info3 on t_role(roleName);--唯一索引
create index ind_info4 on t_use1,m v_now;(userName) reverse;--反向索引
--create bitmap index ind_info5 on t_u_r(1,m v_now;emark);--位图索引
create table t_sex
(
sexId number(2) primary key,
sexName varchar(2) not null
) organization index;--索引组织表(查询快,修改慢)
--触发器
create trigger tri_user --sys 用户数据中不可建
before insert on t_user --before ,after ,instead of
for each row--行级触发器,不加则为语句级触发器
begin
dbms_output.put_line('trigger Result:'||:NEW.userId||' '||:NEW.userName);--:NEW 代表新数据 :OLD 代表旧数据条件表达示如:while 中不需要':'
end;
--pl/sql 语句
begin
dbms_output.put_line('hello '||'world');
end;
declare
uName t_user.userName %type;--当前列的数据类型
uResult t_user %Rowtype;--%rowtype 代表一行,类似于面向对象中的对象
type uType is record(mId t_user.userId %type,mName t_user.username %type);--自定义类型
myResult uType;--使用自定义类型
begin
uName := 'goodboy';
dbms_output.put_line('my name is '||uName);
select userName into uName from t_user where userId = 4;
dbms_output.put_line('Result:userId = 4 ,userName = '||uName);
select * into uResult from t_user where userId = 1;
dbms_output.put_line('Result:userId = '||uResult.userId ||' ,userName = '|| uResult.userName);
select * into myResult from t_user where userId = 1;
dbms_output.put_line('Result:mId = '||myResult.mId ||' ,mName = '|| myResult.mName);
end;
declare
uNumber number(4) default 5;--默认值
begin
dbms_output.put_line('Result:uNumber ='||uNumber);
if uNumber > 30 then
uNumber := uNumber - 10;
dbms_output.put_line('Result:if uNumber >30, uNumber - 10='||uNumber);
elsif uNumber < 10 then
dbms_output.put_line('Result:if uNumber >10, uNumber + 10='||(uNumber + 10));
else
dbms_output.put_line('Result:if uNumber, uNumber='||uNumber);
end if;
case uNumber--case 用法1
when 30 then dbms_output.put_line('Result:case uNumber =30, uNumber = '||uNumber);
when 10 then dbms_output.put_line('Result:case uNumber =10, uNumber = '||uNumber);
else dbms_output.put_line('Result:case uNumber else, uNumber = '||uNumber);
end case;
case --case 用法2
when uNumber > 30 then dbms_output.put_line('Result:case uNumber > 30, uNumber = '||uNumber);
when uNumber < 10 then dbms_output.put_line('Result:case uNumber < 10, uNumber = '||uNumber);
else dbms_output.put_line('Result:case uNumber else, uNumber = '||uNumber);
end case;
while uNumber < 20--while loop
loop
uNumber := uNumber + 5;
dbms_output.put_line('Result:while loop, uNumber = '|| uNumber);
end loop;
loop --loop
exit when uNumber < 10;
uNumber := uNumber - 5;
dbms_output.put_line('Result:loop, uNumber = '|| uNumber);
end loop;
for resultNumber in 9..16--这里 resultNumber无需定义,每次会自+1,for loop
loop
dbms_output.put_line('Result:for loop, resultNumber = '|| resultNumber);
if resultNumber = 12 then
dbms_output.put_line('Result:for loop, resultNumber = '|| resultNumber||' exit loop');--exit 类似于break ,return 会从这里退出
exit;
end if;
end loop;
if uNumber < 40 then
dbms_output.put_line('use goto to goto1.');
goto goto2;-- goto 的使用
end if;
<<goto1>>--goto 节点
dbms_output.put_line('goto1');
<<goto2>>
dbms_output.put_line('goto2');
dbms_output.put_line('over-------------');
end;
declare
myException exception;--自定义异常
uException exception;
pragma exception_init(myException,-20001);-- -20000 ~-20999之间
begin
--raise myException;
raise_application_error(-20001,'哈哈,我是-20001!');
Exception--捕捉异常
when uException then
dbms_output.put_line('raise uException.');
when others then--其它异常
dbms_output.put_line('other 猜猜它是谁?');
raise;--重新把当前异常抛出
end;
declare
sqlString varchar(60);
userName t_user.userName %type;
begin
sqlString :='insert into t_user values(user_seq.nextval,:1)';--注意这里 :1
userName := 'isw2';
execute immediate sqlString using userName;--动态SQL
execute immediate 'select * from t_user';
end;
select * from t_user;
--游标
declare
uId t_user.userId %type default 3;
begin
select userid into uid from t_user where t_user.userid = uId;--隐示游标(返回结果只能一行)
if sql%Isopen then dbms_output.put_line('游标打开');--DML 语句执行时游标打开执行完关闭
elsif sql%found then dbms_output.put_line('游标有效');
elsif sql%Notfound then dbms_output.put_line('游标无效');
end if;
dbms_output.put_line('影响行数' || sql%rowCount );
end;
declare
cursor ucur is select * from t_user;--显示游标
uRow t_user %Rowtype;
begin
open ucur;--打开游标
if ucur%isopen then dbms_output.put_line('游标成功打开.');
end if;
loop
fetch ucur into uRow;
exit when ucur%notfound;
dbms_output.put_line('cursor result: userId = ' || uRow.userId ||' userName= ' || uRow.userName);
end loop;
dbms_output.put_line('影响行数:' || ucur%rowCount);
close ucur;
end;--在这里销毁
declare
cursor ucur(maxVal t_user.userId %type) is select * from t_user where userid < maxVal;--带参游标
uRow t_user %Rowtype;
type nullCur is ref cursor;--引用游标(弱类型) type nullCur is ref cursor return t_user %Rowtype(强类型,不可改变);
ncur nullCur;
begin
for uRow in ucur(10)--循环游标
loop
dbms_output.put_line('当前行数:' || ucur%rowCount);
dbms_output.put_line('cursor result: userId = ' || uRow.userId ||' userName= ' || uRow.userName);
end loop;
open ncur for select * from t_user;--打开游标
if ncur%isopen then dbms_output.put_line('引用游标成功打开.');
end if;
loop
fetch ncur into uRow;
exit when ncur%notfound;
dbms_output.put_line('cursor result: userId = ' || uRow.userId ||' userName= ' || uRow.userName);
end loop;
close ncur;
end;
--存储过程
create procedure pro_first
as
begin
dbms_output.put_line('存储过程');
end;
call pro_first();--调用存储过程
begin
pro_first();
end;
create procedure pro_second (info in varchar2,uname out varchar2,uinfo in out varchar2)--这里varchar2 不能限制大小
as--in 输入参数,out 输出参数 in out 输入输出参数
urole varchar2(20);
begin
urole := 'good';
uname := 'boy';
dbms_output.put_line('pro_second Result:urole='||urole||' uname ='||uname||' uinfo='||uinfo||' info='||info);
uinfo := 'over';
end;
declare
info varchar2(20) default ' valueinfo ';
uname varchar2(20) default ' valueuname ';
uinfo varchar2(20) default ' valueuinfo ';
begin
pro_second(info,uname,uinfo);
dbms_output.put_line('Result: uname ='||uname||' uinfo='||uinfo||' info='||info);
end;
--函数 drop function fun_first;
create function fun_first return varchar2--返回类型
as
begin
return 'good';--返回值
end;
select fun_first() from dual;--区别于存储过程,它可以做为表达式的一部分
--包
--drop package pac_study1;
create package pac_study1
as
procedure pro_study1 ;
function fun_study1 return number ;
userNo t_user.userid%type;
cursor cur_study1 is select * from t_user where userId = userNO;--先定义后使用
end pac_study1;
-- 包体
create package body pac_study1
as
procedure pro_study1
is
begin
dbms_output.put_line('我是 pac_study1.pro_study1');
end pro_study1;
function fun_study1 return number
is
begin
return 144;
end fun_study1;
end pac_study1;
--可以不完全声明, 这不会出错但没意义
begin
pac_study1.pro_study1();
end;
select pac_study1.fun_study1() from dual;
分享到:
相关推荐
Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
Oracle学习笔记 Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接...
在Oracle学习笔记中,对安装卸载和配置的详尽讲解,不仅为学习者提供了操作指导,而且还涉及到了数据库管理的一些基础知识点。这些内容对于数据库管理员和开发人员来说都是十分重要的,因为它们是操作Oracle数据库的...
Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...
资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...
以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...
### Oracle 学习笔记知识点概览 #### 一、Oracle 数据库系统参数查询与管理 在 Oracle 数据库的学习过程中,了解如何查看和管理数据库的系统参数是非常重要的。这些参数直接影响着数据库的性能和稳定性。 ##### ...
ORACLE学习笔记:日常应用、深入管理、性能优化.part1
Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的特性和功能来优化数据管理和查询性能。本文主要探讨Oracle数据库的入门基础知识,特别是与索引相关的概念。 首先,我们要理解ROWID的概念。ROWID是...
全网最全的oracle学习笔记,oracle学习笔记,oracle,### 4、oracle的七个服务 ```sql 1、Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如...
根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ...以上是基于提供的内容整理出的Oracle学习笔记中的关键知识点。通过理解这些基础知识,可以更好地管理和操作Oracle数据库。
Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...
在“MSDN Oracle学习笔记”中,我们可以期待找到关于Oracle数据库的详细讲解和实践指导。 首先,Oracle数据库的基础知识是必不可少的。这通常涵盖数据库系统的基本概念,如SQL(结构化查询语言)的使用,数据类型,...
oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记oracle 学习笔记