ORACLE笔记

发布 2021-05-11 22:57:28 阅读 2811

● 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...