● oracle 的 pl/sql 编程。
1. 基本概念:pl/sql 是在标准sql 基础上扩展的一种对oracle 数据库进行编程的语言。可以定义常量,变量,而且可以使用条件语句和循环语句。
2. 为什么需要pl/sql 编程?
3、 快速入门案例:
开发一个简单的存储过程,可以完成向某表添加数据。
create procedure pro1 is
begininsert into emp(empno,ename) values(4444,'**c');
end;如何调用存储过程?
1、 先看看如何在控制台中调用:
exec 过程名称(参数1,参数2...
2、 在j**a 程序中调用。
再举例说明可以接受参数的:
create procedure pro2(in_empno number) is
begindelete from emp where empno=in_empno;
end;调用:exec pro2(4444);
pl/sql 可以做什么??
利用pl/sql 可以开发过程,函数,包(包体),触发器。
他们的基本编程单元是块。
pl/sql编程的规范:
块的基本结构:
declare
-声明部分:定义变量的部分。
begin-执行部分。
exception
-捕获例外。
end;说明:declare 和 exception 部分是可选的,不是必须的。
1、 只包含执行部分的案例:
输出 hello,world
-开发一个只包括执行部分的块。
begindbms_'hello,world');
end;说明:在默认情况下是不会输出的,需要执行命令:set serveroutput on;
2、 包含执行和declare的案例:
declare
-定义变量的格式:变量名称变量的类型。
v_ename varchar2(8);
beginselect ename into v_ename from emp where empno=&empno;
-输出v_ename
dbms_'雇员名是'||v_ename);
end;也可以把块改造成一个过程。
-将其改为一个过程。
create procedure pro4(in_empno number) is
-定义变量的格式:变量名称变量的类型。
v_ename varchar2(8);
beginselect ename into v_ename from emp where empno=in_empno;
-输出v_ename
dbms_'雇员名是'||v_ename);
end;3、 包含定义部分,执行部分,例外部分的案例:
比如:在实例②中,如果输入了不存在的雇员号,应当做例外处理。
declare
v_ename varchar2(8);
beginselect ename into v_ename from emp where empno=7901;
-输出用户名字。
dbms_'雇员名是 '|v_ename);end;
ora-01403: 未找到数据。
ora-06512: 在 line 5
从上面的案例可以看出,如果我们输入的编号不存在,则系统会提示异常,为了更明确的指出错误,oracle 提供了异常(exception)处理机制。
快速入门案例:
declare
v_ename varchar2(8);
beginselect ename into v_ename from emp where empno=&empno;
-输出用户名字。
dbms_'雇员名是 '|v_ename);
exception
when no_data_found then
dbms_'你输入的编号有误!')
end;对该案例的细节说明:
这里我们涉及到异常处理:
异常处理的基本语法是:
exception
when 异常的名称 then
/对异常进行处理的**。
when 异常的名称2 then
/对这种异常处理。
end;oracle 提供的异常有一下几种:(参看官方帮助文档)
异常处理的作用:
1)、可以给出捕获异常,并给出明确提示。
2)、有时可以利用异常,来进行业务处理;
举例:比如如果用户输入的编号不存在,则插入一条数据。
declare
v_ename varchar2(8);
beginselect ename into v_ename from emp where empno=&empno;
-输出用户名字。
dbms_'雇员名是 '|v_ename);
exception
when no_data_found then
dbms_'你输入的编号有误!我帮你插入一条数据');
insert into emp(empno,ename) values(1,'马大哈');
end; 过程的进一步讲解:
oracle 过程,可以指定参数是输入参数,还是输出参数,基本语法如下:
create procedure 过程名(变量名 in 变量类型。。。变量名 out 变量类型。。。is
/定义变量。
begin/执行语句。
end;-请编写一个过程,可以输入雇员名,新工资,可修改雇员工资。
create or replace procedure pro5(in_ename in varchar2,in_new_sal in number) is
beginupdate emp set sal=in_new_sal where ename=in_ename;
end;特别说明:当我们编写过程时,可以输入 show error;命令来查看错误。
如何在j**a程序中调用过程?
需求说明:使用j**a调用上面的过程:
**:package
import
public class testprocedure ")
给?赋值。"smith");
456.6f);
执行。catch (exception e)
对sqlhelper 类的一个升级,添加了一个执行过程的方法:**如下:
/调用存储过程的方法。
public static void executeprocedure(string sql,string parameters)
finally
课堂小练习:
编写一个过程,可以接受id和薪水,更新薪水,如果id不存在,需要再exception 中捕获,并给出提示!需要再控制台和j**a程序中都调用。
create or replace procedure pro1(in_empno in number,in_sal in number) is
v_ename varchar2(32);
begin
select ename into v_ename from emp where empno=in_empno;
update emp set sal=in_sal where empno=in_empno;
exception
when no_data_found then
dbms_'您输入的编号有误');
end;如何在存储过程中返回一个结果(这个结果可能是一个简单的值,也可能是一个集合)?
函数。基本语法:
create function 函数名(参数1,参数2.。。
return 返回的数据类型 is
-定义变量。
begin-执行语句。
end;快速入门案例:
接收用户名,并返回该用户的年薪。
create or replace function fun1(in_v_ename varchar2)
return number is
-定义一个变量来接收年薪。
v_annual_sal number;
begin
select sal+nvl(comm,0)*13 into v_annual_sal from emp where ename=in_v_ename;
oracle笔记
1 查看表的结构 desc tabledescription 2 set timing on 打开操作表的时间记录。3 消除重复行 distinct 4 大小写不区分的是列名,而不是里面的数据。1 可以对某一列直接进行加减乘除。两列相加。2 如果有一列为null,所得结果也为空。使用nvl函数处理n...
Oracle笔记
第1页1.oracle 的使用 1.1.sqlplus 的命令 初始化表的位置 set nls lang american 设置编码才可以使用下面脚本 cd oracle home rdbms cd demo 我们目前使用的是oralce 9i 9201 版本 select from v versi...
oracle笔记
clear 清屏。col title for a20 设置title的字符最多有20个。oracle介绍。rdbsrdb 基本的存储结构是,二维表。表头。行。列。字段。sql的分类 dsl 关键字 select dml 操作 insert delete update ddl 定义 create dr...