Oracle存储过程与触发器基本操作

(1) 在JXGL 数据库中创建一存储过程并运行,从S 表中查询所有女生的信息。

1、创建存储过程

create or replace procedure prFemale(
pSno out S_RZ0119.Sno%type,
pSname out S_RZ0119.Sname%type,
pSage out S_RZ0119.Sage%type,
pSsex out S_RZ0119.Ssex%type,
pSdept out S_RZ0119.Sdept%type,
out_var out sys_refcursor
)
is
begin
open out_var for select Sno,Sname,Sage,Ssex,Sdept into pSno,pSname,pSage,pSsex,pSdept
from S_RZ0119
where Ssex=‘女‘;
end;
/

2、执行存储过程

var abc refcursor
declare
pSno varchar2(11);
pSname varchar2(20);
pSage number(2);
pSsex varchar2(9);
pSdept varchar2(20);
begin
prFemale(pSno,pSname,pSage,pSsex,pSdept,:abc);
end;
/

//打印

print :abc;

(2) 在JXGL 数据库中创建一存储过程并运行,从S 表中根据学号查询并返回该学
生的姓名和年龄。

1、创建根据学号查询学生姓名和年龄的过程

create or replace procedure searchS(
pSno in S_RZ0119.Sno%type,
pSname out S_RZ0119.Sname%type,
pSage out S_RZ0119.Sage%type
)
is
begin
select Sname,Sage into pSname,pSage
from S_RZ0119
where Sno=pSno;
end;
/

2、执行存储过程

declare
pSname varchar2(20);
pSage number(20);
begin
searchS(‘131102‘,pSname,pSage);
dbms_output.put_line(pSname);
dbms_output.put_line(pSage);
end;
/

(3) 在JXGL 数据库中创建一触发器,保证S 表中学生的年龄在8-45 岁之间。

1、创建年龄触发器

create or replace trigger tri_SageWrong
before insert
on S_RZ0119
for each row
begin
if((:new.Sage<8) or (:new.Sage>45)) then
RAISE_APPLICATION_ERROR(-20600,‘学生表中的学生年龄必须在8-45之间!‘);
end if;
end;
/

2、测试

insert into S_RZ0119 values (‘130105‘,‘李得胜‘,‘男‘,6,‘软件工程系‘);

(4) 在JXGL 数据库中创建一触发器,当有学生选了某门课时,不能从C 表中删除
该课程。

1、创建课程触发器

create or replace trigger tri_CourseDelet
before delete
on C_RZ0119
for each row
declare CCount number;
begin
select count(*) into CCount from SC_RZ0119 where Cno=:old.Cno;
if CCount>0 then
RAISE_APPLICATION_ERROR(-20601,‘该课程已被学生选定,不能删除!‘);
end if;
end;
/

2、测试

delete from C_RZ0119 where Cno=‘C001‘;
时间: 2024-10-09 22:57:49

Oracle存储过程与触发器基本操作的相关文章

oracle 存储过程 ,触发器练习

/*以下代码是对emp表进行显示宽度设置 */col empno for 9999;col ename for a10;col job for a10;col mgr for 9999;col hiredate for a12;col sal for 9999;col comm for 9999;col deptno for 99;col tname for a12;set pagesize 50; //----------------------------------------------

oracle:存储过程和触发器

存储过程(stored procedure) :可以看作带名字的pl/sql程序块:通过名字调用执行:可以带参数或不带参数. 触发器(trigger):通过事件触发执行,可看成特殊类型的存储过程. 下图建立了一个acc存储过程,显示account账户的id 及其对应的money值: 存储过程执行:1.exec p;        2. begin p; end; / 下面存储过程,给收入在[1000,2000)区间的用户增加1块收入,给给收入在[2000,3000)区间的用户增加2块收入. 执行

Oracle存储过程与触发器

7-1(存储过程)创建一个显示学生总人数的存储过程 1 SQL>SET SERVEROUTPUT ON 2 SQL>CREATE OR REPLACE PROCEDURE STU_COUNT 3 2AS --需要定义的存储过程内的变量均写在AS下 4 3TOTAL NUMBER --定义 5 4BEGIN 6 5 SELECT COUNT(SNO) INTO TOTAL FROM STUDENT; --SELECT 后的变量个数要与INTO 后一致 7 6 DBMS_OUTPUT.PUT_LI

Oracle数据库基本操作五——存储过程与触发器

  4. 存储过程与触发器: 例7-1: (存储过程) 创建一个显示学生总人数的存储过程. set serveroutput on create or replace procedure student_count as p1 number(3); begin select count(*) into p1 from student; dbms_output.put_line('学生总人数是:'||p1); end; / execute student_count(); 例7-2: (存储过程)

oracle存储过程和存储函数&amp;触发器

oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 =========================创建和使用存储过程============================= 用create procedure命令建立存储过程和存储函数 语法: create [or replace] procedure 过程名(参数列表) as PLSQL子程序

存储过程和触发器——MySQL

从MySQL5.0版本开始就对存储过程和触发器进行了支持,在MySQL进行学习前,先查看您所使用的版本吧,方法有: 1.$mysql -V  //linux终端下 2.select version();  //mysql下 3. mysql --help | grep Distrib  //linux终端下 在了解您所使用的版本支持情况下再下一步 存储过程  sql语句执行的时候要先编译,然后执行.存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数

oracle存储过程加密

引言:平时大家在做项目的时候,经常会遇到把Oracle存储过程带到项目现场来测试系统.这时如果想对自己的存储过程进行保密,不使别人看到源代码,就可以对已有的存储过程进行加密保护.顾名思义,就是对Oracle存储过程源码的加密.当然不是什么时候都需要的,当有的项目对安全性要求比较高的时候可以采用,下面我就用案例来介绍这种加密方式和实验结果. 实验环境 操作系统版本 Red Hat Enterprise Linux Server release 6.5 (Santiago) 数据库版本 Oracle

Oracle 存储过程加密之wrap工具

<Oracle 存储过程加密之wrap工具> 定场诗 道德三皇五帝,功名夏侯商周,五霸七雄闹春秋,顷刻兴亡过手, 青石几行名姓,北邙无数荒丘,前人播种后人收,说甚龙争虎斗. 引言:平时大家在做项目的时候,经常会遇到把Oracle存储过程带到项目现场来测试系统.这时如果想对自己的存储过程进行保密,不使别人看到源代码,就可以对已有的存储过程进行加密保护.顾名思义,就是对Oracle存储过程源码的加密.当然不是什么时候都需要的,当有的项目对安全性要求比较高的时候可以采用,下面我就用案例来介绍这种加密

存储过程和触发器优缺点分析

由于要给同学分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法.经过这么多年,我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因很简单:良好的性能,业务也好实现.可是在做上次的项目的时候,由于业务很复杂,存储过程和触发器的数量均都达到上百之多,这是一件很恐怖的事情,尤其是在出了错调试维护的时候,就会想没有这些东西多好.下面我从经验角度梳理一下对存储过程和触发器的看法.        1.触发器是特殊的存储过程. 这句话在教科