索引
目地:更快地检索数据。
特点:读取数据速度快,但添加数据速度慢.。
语法:
create index idx_stu_email on stu (email) ;
drop index idx_stu_email ;
select index_name from user_indexs ;
========================================================
视图
特点:视图相当于子查询。
语法:
create view v$;
select view_name from user_views ;
desc v$_dept_avg_sal_info ;
create view v$_stu as select id,name from stu ;
=========================================================
存储过程
语法:
1.创建不带参数的存储过程
create or replace procedure p
as
cursor c is
select * from emp for update;
begin
for v_emp in c loop
if(v_emp.deptno = 10) then
update emp set sal = sal +10 where current of c;
elsif (v_emp.deptno = 20) then
update emp set sal = sal + 20 where current of c;
else
update emp set sal = sal + 50 where current of c;
end if ;
end loop ;
commit ;
end ;
// 执行存储过程(两种方式)
· exec p;
· begin
p;
end;
2.创建带参数的存储过程
create or replace procedure p
(v_a in number,v_b number,v_ret out number)
is
begin
if(v_a > v_b) then
v_ret:=v_a ;
else
v_ret :=v_b ;
end if ;
end ;
// 执行带参数的存储过程
declare
v_a number:=3 ;
v_b number:=4 ;
v_ret number ;
begin
p(v_a,v_b,v_ret) ;
dbms_output.put_line(v_ret) ;
end ;
===============================================================
触发器
利用触发器实现的业务如下:
现有两个表:emp和operate_info表,当用户对emp表进行增删改操作时,触发你所创建的触发器,该触发器执行向operate_info表中插入一条信息,记录用户对emp表的操作。
语法:
创建emp表:
create table emp
(
uname varchar2(20),
action varchar2(10),
atime date
)
// 创建触发器
create or replace trigger trig
after insert or delete or update on emp for each row
begin
if inserting then
insert into emp_log values (USER,'insert',sysdate) ;
elsif updating then
insert into emp_log values (USER,'upate',sysdate) ;
elsif deleting then
insert into emp_log values (USER,'dalete',sysdate) ;
end if;
end ;
// 删除触发器
drop trigger trig ;
===========================================================
序列(Sequence):
Sequence 语法:
=====================================================================create sequence seq_testminvalue 10000maxvalue 99999999999999999start with 20000increment by 1cache 20cycleorder;
函数
函数用于返回特定的数据,当建立函数时,在函数头部必须包含 return 子句。
而在函数体内必须包含 return 语句返回的数据。我们可以使用 create function
来建立函数,实际案例:
Sql 代码
1. --输入雇员的姓名,返回该雇员的年薪
2. create function annual_incomec(name varchar2)
3. return number is
4. annual_salazy number(7,2);
5. begin
6. --执行部分
7. select sal*12+nvl(comm, 0) into annual_salazy from emp where ename=name;
8. return annual_salazy;
9. end;
10. /
如果函数创建过程有编译错误,可以使用show error;命令显示错误
在 sqlplus 中调用函数
Sql 代码
1. SQL> var income number
2. SQL> call annual_incomec('scott') into: income;
3. SQL> print income
======================================================================
包
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。
1、我们可以使用 create package 命令来创建包。
实例:
--创建一个包 sp_package
--声明该包有一个过程 update_sal
--声明该包有一个函数annual_income
Sql 代码
1. create package sp_package is
2. procedure update_sal(name varchar2, newsal number);
3. function annual_income(name varchar2) return number;
4. end;
包的规范只包含了过程和函数的说明,但是没 过程和函数的实现代码。包体用于实现包规范中的过程和函数。
2、建立包体可以使用 create package body 命令
--给包 sp_package 实现包体
Sql 代码
1. create or replace package body sp_package is
2. procedure update_sal(name varchar2, newsal number)
3. is
4. begin
5. update emp set sal = newsal where ename = name;
6. end;
7. function annual_income(name varchar2) return number is
8. annual_salary number;
9. begin
10. select sal * 12 + nvl(comm, 0) into annual_salary from emp where ename = name;
11. return annual_salary;
12. end;
13. end;
14. /
3、如何调用包的过程或是函数
----------------------- Page 73-----------------------
当调用包的过程或是函数时,在过程和函数前需要带 包名,如果要访问其它方案的包,还需要在包名前加方案名。
如:
SQL> call sp_package.update_sal('SCOTT', 1500);
特别说明:
包是pl/sql 中非常重要的部分,我们在使用过程分页时,将会再次体验它的威力
相关推荐
Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包 Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包
Oracle购物系统是一个全面的数据管理平台,它包含了数据库设计的核心元素,如表、视图、序列、触发器、程序包等,这些都是构建复杂业务逻辑和高效数据处理的关键组件。以下是对这些概念的详细解释: 1. **表**:在...
"Oracle入门学习文档toad"是一套专为初学者设计的资料集,它涵盖了Oracle数据库的基础知识,包括数据操作、查询、表和视图、存储过程、函数与包等核心概念。以下是这些章节的主要知识点: 第1章:Oracle基础教程 本...
1. **对象所有权**:确保表、序列和索引等核心数据库对象创建在相应的用户表空间中,而视图、别名等辅助对象应创建在Apps用户下。避免将表直接建在APPS下,以免引发权限问题和删除操作失败。 2. **SQL脚本编写**:...
通过学习讲义中的源码,我们可以了解到如何编写存储过程、触发器、函数和包,这些都是在Oracle中实现业务逻辑的关键工具。同时,源码分析还能帮助我们理解数据库性能优化,如索引的创建和使用,以及查询优化器的工作...
7. **数据库对象**:Oracle数据库包含各种对象,如表、视图、索引、序列、同义词和存储过程等。理解这些对象的作用和创建方法,以及如何通过SQL语句进行操作,是数据库设计和管理的基础。 8. **PL/SQL**:PL/SQL是...
3. **数据库对象**:掌握如何创建和管理各种数据库对象,如表、索引、序列、存储过程、触发器、函数和包。 4. **用户管理与权限**:学习如何创建用户,分配权限,理解角色的概念,以及如何进行权限的撤销和继承。 ...
基本的sql语法,触发器,存储过程,存储函数, 流程控制,游标,异常处理,记录类型,视图, 控制用户权限,高级子查询,set运算符, 基本的sql_Select语句 运算符,多表联查,排序,组函数,序列,索引,同义词, ...
5. 序列、同义词、触发器、存储过程和函数的定义。 6. 表空间和数据文件:存储数据库对象的位置和大小信息。 7. 用户和角色的密码策略:过期时间、最小密码长度等。 8. 归档和重做日志文件:数据库的恢复信息。 ...
掌握Oracle中的各种数据库对象,如表、视图、索引、序列、存储过程、触发器、函数和包,以及它们的作用和创建方法。 6. **数据库管理** 学习如何管理用户、权限和角色,理解SYS和SYSTEM等内置用户的角色,以及...
此外,为了更有效地管理和维护数据,Oracle还提供了诸如触发器、存储过程和函数等数据库对象。这些数据库对象是存储在数据库中的代码,可以在特定事件发生时自动执行,或者在需要时被调用。 除了数据管理之外,...
"Oracle开发笔记" Oracle 是一种关系型数据库...Oracle 开发笔记提供了许多有价值的知识点,涵盖了序列建立、存储过程、常用函数、异常处理、游标实现和语句优化等方面,都是 Oracle 开发者们必须掌握的重要技能。
Oracle数据库中的对象包括表、视图、索引、序列、触发器、存储过程、函数和包等。这些对象构成了数据库的主体结构,用于存储和操作数据。理解如何创建、查询和管理这些对象对于数据库管理员至关重要。 3. **Oracle...
Oracle的详细介绍包括其软件体系结构、数据库基础、SQL语法、数据字典、数据类型、体系结构、数据操作语言(DDL)、数据操作语言(DML)、约束、视图、索引、序列、同义词、PL/SQL编程、游标、存储过程、触发器、事务...
- 如果触发器导致性能问题,考虑重构触发器,或者使用其他数据库特性,如物质化视图、物化查询表或存储过程。 总结来说,Oracle数据库触发器是一种强大的工具,用于扩展数据库的行为,但需要谨慎使用,以防止性能...
第八章:管理索引、视图与序列使用约束 索引概述 B树索引(默认) 位图索引 函数索引 视图 序列 利用OEM操作 第九章:备份与恢复 脱机备份与恢复 联机备份与恢复 逻辑备份与恢复 第十章:sqlplus基础 ...
"存储过程、函数和包"进一步提升了数据库的复用性和模块化。存储过程是一组预编译的SQL语句,可以封装在一起并按需调用;函数返回一个值,常用于计算或验证;包则是将相关的存储过程和函数打包的集合,提供了更好的...
"第8章 存储过程、函数和包.ppt"讲解了Oracle的程序设计元素。存储过程是预编译的SQL语句集合,可以提高执行效率;函数是返回单一值的存储过程,而包则可以封装相关的过程和函数,提供模块化的代码管理。 "第9章 ...