存储过程 学习笔记一

create table mytest(
name varchar2(30),
password varchar2(30)
);

create or replace procedure sp_pro1 is
begin
--执行部分
insert into huangbiao.mytest values ('huangbiao','123');
end;

create or replace procedure sp_pro2 is
begin
delete from huangbiao.mytest where name='huangbiao';
end;
/

exec sp_pro2;
如何查看错误信息
show error;

如何调用该过程
1、exec 过程名(参数1,参数2....)
2、call 过程名(参数1,参数2....)


单行注释--
多行注释/*....*/
定义变量,建议v_作为前缀v_sal
定义常量,建议c_作为前缀c_rate
定义游标,建议_cursor结尾 emp_cursor
定义例外,建议e_作为前缀e_error

pl/sql块由三部分构成:
定义部分----declear,该部分是可选的
执行部分----begin,该部分是必须的
例外处理部分----exception,该部分是可选的


最简单的块
set serveroutput on----打开输出选项
begin
dbms_output.put_line('hello');
end;
dbms_output是Oracle所提供的包,类似于JAVA中提供的包,put_line是dbms_output包中的函数

定义部分和执行部分
declare
v_ename varchar2(500);----定义变量
begin
select name into v_ename from mytest where password='123';
dbms_output.put_line('name is ' || v_ename);
end;

declare
v_ename varchar2(500);----定义变量
begin
--&password 表示用户手动的输入值进去
select name into v_ename from mytest where password=&password;
dbms_output.put_line('name is ' || v_ename);
end;

关于多值对应(当前用户需要有访问scott.emp表的查询权限)
declare
v_ename varchar2(500);----定义变量
v_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from scott.emp where ename='SCOTT';
dbms_output.put_line('name is ' || v_ename || ' sal is '|| v_sal);
end;

异常处理
declare
v_ename varchar2(500);----定义变量
v_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from scott.emp where ename='&ename';
----&ename一定要被引号包裹起来,否则会出现语法错误
dbms_output.put_line('name is ' || v_ename || ' sal is '|| v_sal);
----异常处理
exception
when no_data_found then
dbms_output.put_line('查不到指定的数据');
end;
备注:
1、当随便输入一个不存在的值就会抛出异常
2、利用异常来处理某些逻辑
3、Oracle利用事先预定义好的异常来处理

案例:
输入雇员的姓名和新工资,可以修改雇员的工资
create or replace procedure sp_pro3(spename in varchar2,spsal in number) is
begin
--执行部分,根据用户名取修改工资
update scott.emp set sal=spsal where emp.ename=spename;
end;

函数用于返回特定的数据,当建立函数时,在函数头必须包含return子句,而在函数体内必须包含return语句返回的数据。
案例
----输入雇员姓名,返回雇员的年薪
create or replace function sp_fun2(spname varchar2)return number is yearsal number(7,2);
begin
----执行部分
select sal*12+nvl(comm,0) into yearsal from scott.emp where ename=spname;
return yearsal;
end;

var income number;
call sp_fun2('SCOTT') into:income;
----into:incom 中间不能有空格,否则查询不到东西
print income

包用于在逻辑上组合过程和函数
create or replace package sp_package is
procedure update_sal(name varchar2,newsal number);
function annual_income(name varchar2) return number;
end;
给包实现包体
create package body sp_package is
procedure

阅读更多
上一篇存储过程例子
下一篇存储过程 学习笔记二
想对作者说点什么? 我来说一句

oracle函数大全及存储过程语法

2012年04月11日 1.13MB 下载

oracle 存储过程分页

2012年11月22日 4KB 下载

oracle学习笔记

2009年08月22日 87KB 下载

学习sql存储过程的心得

2009年03月01日 113KB 下载

存储过程学习文档

2013年05月03日 192KB 下载

没有更多推荐了,返回首页

关闭
关闭