`

oracle中的procedure,function,trigger

阅读更多

1.procedure

--修改student表中对应id的学生姓名
create or replace procedure p_modifyName
(v_Name in varchar2,v _Id char) as --and another:out,in out
begin
update student set name=v_name where id=v_Id;
commit;
end p_modifyName;


--调用存储过程
declare

v_Name varchar2(10);
v_Id char(10);
begin
v_Name:='朱林';
v_Id:='0420622';

--调用上面创建的存储过程
p_modifyName(v_Name,v_Id);

end;

--p_modifyName('朱林','420622');

--位置标志法:要按照位置排序
--带名标志法:
declare
v_Sname varchar2(10);
v_Sid char(10);
begin
v_Sname:='朱林';
v_Sid:='0420622';

p_modifyName(v_Id=>v_Sid,v_Name=>v_Sname);

--删除存储过程
drop procedure P_modifyName;

--增加权限
grant execute on ProceduceName to UserName;
revoke execute on ProceduceName from UserName;

实例
create or replace procedure for_loop(
v_num1 in number;
v_num2 in number;)
is
i number(3);
begin
if v_num1<=v_num2 then
i:=v_num1;
for i in v_num1..v_num2 loop --这里的循环是循环到v_num2的值就结束循环了
dbms_output.putline(i);
end loop;
end if;
end;
查看所写的存储过程
select *from dba_source where type='procedure';

2.function

--函数功能:
--得到指定系,指定课程的出勤情况,如果全部出勤,则返回'full',如果出勤超过80%,则返回'Some Room',超过60%,则返回'More Room',如果出勤小余60%,返回'Lots of room',
--没有出勤,返回'Empty'
create or replace function GetClassInfo(
--系名
v_Dept classes.department%type,
--%type:v_Dept 继承了classes表中department字段的数据类型和精度
--课程名
v_Course class.course%type)
return varchar2 is
--出勤的学生数
n_CurrSNum number;
--学生人数
n_MaxSNum number;
--出勤率
n_PercentFull number;
begin
--得到学生的出勤人数和学生总人数
select current_students,max_students
--查询的返回值被赋予INTO子句中的变量
into n_CurSNum,n_MaxSnum
from classes
where department=v_Dept
and course=v_Course;
--计算出勤率

n_PercentFull:=n_CurSum/n_MaxSum*100;
--返回值
if n_PercentFull=100 then
return 'Full';
....
...
end if;
end GetClassInfo;


--调用函数
declare
v_Dept varch2(30);
v_Course varchar2(30);
v_ClassInfo varchar2(20);
begin
v_Dept:='水利系';
v_Course varchar2:='水力学';
v_ClassInfo:=GetClassInfo(v_Dept,v_Course);
dbms_output.put_line(v_ClassInfo);
end;

3.trigger

--indert,delete,update触发t_UpdateMajorStats,保持major_stats最新记录
--create major_stats
create table major_stats(
major varchar2(30),
total_credits number(3),
total_students number(4);

-- create trigger major_stats,update major_stats
create or replace trigger t_UpdateMajorStats

after insert or delete or update on student
declare
cursor c_Statistics is --define a cursor
select major,count(*) as total_students, --count(name) etc
sum(current_credits) as total_credits
from student --get new record from student

group by major;
begin
delete from major_stats; --clear major_stats
for v_StatsRecord in c_Statistics loop --
--for 循环变量 in [reverse] 初始值..结束值 loop
insert into major_stats(major,total_credits,total_students)
values (v_StatsRecord.major,v_StatsRecord.total_credits,
v_StatsRecord.total_students); --insert new record into major_stats
end loop
end t_UpdateMajorStats;
/

--"show errors;" can show error from trigger


--another simple example
create or replace trigger T_DEL_EMP
before delete on emp
for each row
insert into del_emp(depno,empno,ename)
values (:old.depon,:old.empno,:old.ename);
end;

--delete the trigger forerver
drop trigger trigger_name;
--undo trigger
alter trigger trigger_name disable;
alter trigger trigger_name enable;

--格式化代码

*每开始一个新的代码块时,应该缩进2-5个空格,注意再每个这样的代码结束后,应该取消这个缩进
*关键字用大写,这样可以区分常规代码和oracle提供的代码
*变量名采用大小写混合模式
*每条语句用一行,增强程序的可读性

刚接触oracle,希望和我一样的朋友共同进步!!

分享到:
评论

相关推荐

    Oracle培訓Procedure﹑Function等简介

    Oracle培訓Oracle Procedure﹑Function、Trigger等

    oracle 包 procedure

    oracle 包 procedureoracle 包 procedure

    oracle编程基础

    oracle procedure trigger function cursor

    oracle创建各种对象

    oracle创建对象:procedure,index,view,function,trigger,sequence,package,type,table,cursor,job

    oracle 视图,函数,过程,触发器自动编译脚本

    where a.object_type in('TRIGGER','PROCEDURE','FUNCTION','VIEW') and a.status='INVALID' and a.owner not in ('SYS' ,'SYSTEM','OUTLN','U_SYSTEM'); spool off exit; eof # Start to backup oracle ...

    Oracle SQL Handler (Oracle客户端工具) V3.1

    &lt;9&gt; 全面支持 PL/SQL(包括 Procedure、 Function、Trigger、 Package), 能够显示 DBMS_OUPTPUT.PUT_LINE 的输出;能够给出错误信息,甚至光标能够精确定位错误所在的行列位置,极大地方便于调试 &lt;10&gt; 提供对常用...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...

    一个oracle客户端(oracle sql handler)

    支持 PL/SQL 语句(包括 Procedure、 Function、Trigger、 Package),能够显示 DBMS_OUPTPUT.PUT_LINE 的输出;能够给出错误信息,甚至光标能够精确定位错误所在的行列位置,方便于调试 o 多线程、多连接:可以...

    震撼推出超方便实用的Oracle开发工具 - Oracle SQL Handler,双语界面,智能SQL编辑器,免装Oracle客户端,能运行于Windows, 双语界面

    支持 PL/SQL 语句(包括 Procedure、 Function、Trigger、 Package),能够显示 DBMS_OUPTPUT.PUT_LINE 的输出;能够给出错误信息,甚至光标能够精确定位错误所在的行列位置,方便于调试 多线程、多连接:可以创建...

    Oracle开发工具 - Oracle SQL Handler(功能强大,超方便好用, 免装客户端, Windows / Linux)

    支持 PL/SQL 语句(包括 Procedure、 Function、Trigger、 Package),能够显示 DBMS_OUPTPUT.PUT_LINE 的输出;能够给出错误信息,甚至光标能够精确定位错误所在的行 列位置,方便于调试 多线程、多连接:可以创建...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

    Oracle8i_9i数据库基础

    第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...

    Tibero 6_Administrator's Guide_v2.1.7_en.pdf

    tibero6 數據管理手冊 英文版, 韓國最大數據庫tibero, 和Oracle相容度高達98%以上,oracle stored procedure, package, function , db trigger, partition tables都能順利無痛移轉完成

    Tibero 6_Installation Guide_v2.1.7_en.pdf

    tibero6 數據庫安裝手冊 英文版, 韓國最大數據庫tibero, 和Oracle相容度高達98%以上,oracle stored procedure, package, function , db trigger, partition tables都能順利無痛移轉完成

    SQL Assistant v5.0

    Mouse-over hints for procedure and function parameters display hyperlinks for procedure/function DDL code view. Improved display of column name popups for PostgreSQL. The popups now indicate auto-...

    Tibero 6_Hadoop Connector Guide

    tibero6 數據庫連接大數據手冊 英文版, 韓國最大數據庫tibero, 和Oracle相容度高達98%以上,oracle stored procedure, package, function , db trigger, partition tables都能順利無痛移轉完成

    Navicat Premium 11.0.10

    Navicat Premium combines the functions of other Navicat members and supports most of the features in MySQL, SQL Server, SQLite, Oracle and PostgreSQL including Stored Procedure...

    Oracle 10g 开发与管理

    三.Alter Trigger语句 94 四.与触发器有关的数据字典 95 第12讲 安 全 98 一. 用户账号 98 1.用户配置文件(概要文件) 98 2.监视用户 98 二. 权限管理 99 (一)系统权限 99 (二) 对象权限 ---9种 100 三. 角色...

    精通SQL 结构化查询语言详解

    13.5.1 Oracle中用户、资源、概要文件、模式的概念 13.5.2 Oracle中的用户管理  13.5.3 Oracle中的资源管理  13.5.4 Oracle中的权限管理 13.5.5 Oracle中的角色管理  第14章 完整性控制 14.1 完整性约束...

Global site tag (gtag.js) - Google Analytics