存储过程 学习笔记一

原创 2013年12月04日 09:55:56

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

相关文章推荐

SybaseIQ存储过程学习笔记

  • 2010年12月17日 16:08
  • 42KB
  • 下载

MVC学习笔记四:利用Entity Framework调用存储过程

MVC利用EF调用存储过程 这一章记录一下,如何通过EF调用数据库中的存储过程。 依然按照前面的两种数据库操作方式,一种是DbContext,第二种是ObjectContext. 一.DbCo...
  • sudazf
  • sudazf
  • 2013年11月07日 23:59
  • 9245

MySQL存储过程学习笔记

一、基本语法及简单实例 1、创建简单的测试环境 mysql> use test; Database changed mysql> show tables; Empty set (0.00 se...
  • horace20
  • horace20
  • 2011年12月09日 11:07
  • 17499

C#开发学习笔记:C#通过存储过程创建数据表

C#开发学习笔记:C#通过存储过程创建数据表

MySQL学习笔记 4:自定义函数和MySQL存储过程

一、自定义函数UDF 1.  语法结构 CREATE FUNCTION functon_name([参数名 参数类型,...]) RETURNS 返回值类型 函数体 2.例子 DELIMI...

java 从零开始,学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)

注释_运算符_函数 注释 --单行注释 /* *多行注释 * * */   --定义局部变量 --declare 局部变量名类型[(长度)] =  默认值; --给局部变量赋值 --   se...
  • lulu147
  • lulu147
  • 2013年11月26日 13:54
  • 1543

myBatis学习笔记(7)——调用存储过程

创建表在数据库中执行create table p_user( id int primary key auto_increment, name varchar(10), sex char(2) ); i...

oracle存储过程及常用函数学习笔记

注: 本篇笔记大部分示例来自网上资料及其他博客。 目前很多互联网项目,都把复杂的业务操作写到了存储过程里,加快执行速度,提高效率。所以学习存储过程也是必要的。简单入门例子示例1/*不带任何参数存储过...

Oracle 学习笔记13 —— 存储过程

存储过程是一种命名的PL/SQL程序块,存储过程是已经编译好的代码,所有在调用的时候不必再次进行编译,从而提高性能。创建存储过程的语法如下: create procedure procedure...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:存储过程 学习笔记一
举报原因:
原因补充:

(最多只允许输入30个字)