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培訓Oracle Procedure﹑Function、Trigger等
Oracle数据库中的“包”(Package)和“过程”(Procedure)是高级数据库编程的重要概念,它们在企业级应用开发中广泛使用。理解并熟练掌握这些概念对于任何Oracle数据库开发者来说都至关重要。 首先,我们来解释...
oracle procedure trigger function cursor
Oracle对象包括触发器(Trigger)、存储过程(Stored Procedure)以及其他多种数据库组件,它们对于实现业务逻辑、数据验证以及性能优化等方面起着至关重要的作用。这篇文档将深入探讨如何在Oracle环境中创建和管理...
3. Package不能被声明为AT,只有package所拥有的function和procedure才能声明为AT。 4. AT程序必须以commit或rollback结尾,否则会产生Oracle错误ORA-06519: active autonomous transaction detected and rolled ...
CREATE TRIGGER用于创建触发器,PROCEDURE和FUNCTION分别用于定义过程和函数,这在数据库业务逻辑实现中至关重要。 11. **序列函数**: NEXTVAL和CURRVAL用于获取序列的下一个和当前值,序列在自增主键生成方面...
Oracle 中的用户管理包括用户的创建、删除、修改等操作。例如,查看当前用户的信息可以使用以下命令: SELECT * FROM V$SESSION; 查看所有用户的信息可以使用以下命令: SELECT * FROM ALL_USERS; 三、表结构...
例如,在Oracle中,可以使用CREATE PROCEDURE语句来创建存储过程,而在MySQL中,则使用CREATE PROCEDURE或CREATE FUNCTION语句。 Oracle和MySQL语句存在许多不同之处,包括数据类型、Select语句、Join语句、...
在Oracle数据库管理系统中,删除用户下的对象是一项常见的管理任务,这通常涉及到清理不再需要的数据空间,或者在重新分配用户权限时进行系统维护。本篇将详细介绍如何在Oracle中安全有效地删除用户下的所有对象。 ...
DECLARE, BEGIN, END关键字用于定义PL/SQL块,PROCEDURE和FUNCTION分别用于创建过程和函数。 总的来说,Oracle SQL语法大全涵盖了查询、数据操纵、数据库对象管理和高级特性等多个方面,对于数据库管理员、开发人员...
3. **查询失效对象**:脚本通过`sqlplus`工具连接到Oracle数据库,并执行一段SQL脚本来查找所有类型为触发器(Trigger)、过程(Procedure)、函数(Function)和视图(View),且状态为无效的对象。为了排除系统...
在Oracle数据库管理系统中,为了实现高效且安全的数据管理与访问控制,系统提供了丰富的权限管理机制。这些权限大致可以分为两大类:对象权限和系统权限。其中,系统权限指的是授予用户在整个数据库范围内的操作权限...
7. 函数(function): 类似于存储过程,但返回一个值,文档中并未明确提及。 8. 包(package): 一组相关的过程、函数、变量和SQL语句的集合,如“pkg_”。 9. 类型(type): 用户自定义的数据结构,文档中提及了...
在Oracle数据库系统中,创建各种对象是数据库管理和开发的重要组成部分。这些对象构成了Oracle数据库的核心功能,使得数据存储、处理和管理变得高效且灵活。以下将详细介绍标题和描述中提到的各种对象及其创建方法。...
6. 存储过程(PROCEDURE)与函数(FUNCTION):这两个是PL/SQL中封装复杂逻辑的结构。习题会涉及如何定义、调用存储过程和函数,以及返回值的处理。 7.游标(CURSOR):游标用于处理查询结果集,尤其在循环遍历数据...
读者可以通过操作这些预先设定的模式,学习如何在Oracle数据库中创建和管理对象,了解数据类型、约束、触发器(TRIGGER)以及数据库对象权限的管理。 最后,ChapterExampleScripts.zip可能包含的是各章的示例脚本,...
Oracle数据库由多个对象组成,如表(TABLE)、视图(VIEW)、索引(INDEX)、存储过程(STORED PROCEDURE)、函数(FUNCTION)和触发器(TRIGGER)。学习创建、修改和删除这些对象是掌握Oracle的基础。 五、SQL查询...
**注意:** Oracle和DB2中的游标语法类似,但在DB2中,`DECLARE`关键字用于声明游标。 ##### 3.2 UDF和触发器中显式游标的转换 **Oracle:** ```sql CREATE OR REPLACE FUNCTION get_data RETURN NUMBER IS CURSOR...
在Oracle中,SQL(结构化查询语言)是用于操作数据的主要工具。基本查询包括SELECT语句,用于从表中检索数据。例如: ```sql SELECT column1, column2 FROM table_name; ``` 你可以使用WHERE子句过滤结果,GROUP BY...
* 创建触发器:create trigger 触发器名 before/after insert/update/delete on 表名 for each row as $$ begin ... end; 复杂查询 Oracle 的复杂查询提供了强大的查询能力,允许开发者创建复杂的查询语句,例如:...