您的位置:首页 > 数据库 > Oracle

oracle中pl/sql编程-笔记

2013-06-11 23:03 323 查看
1.pl/sql编程

pl/sql 指procedure language 过程化/sql.

pl/sql 是oracle在标准的sql语句基础上扩展的一种对oracle数据库进行编程的的语言。

可以定义变量和常量,而且可以使用条件语句和循环语句。

2.为什么要有pl/sql编程?

平时是通过java对数据操作,但是有个缺点

(1)不能模块化编程,比如完成订单,可能需要发几条sql语句

(2)执行速度慢

(3)安全问题(在程序中会有表名)

(4)浪费带宽

可以通过在数据库里面编写过程,然后用java去调用过程

缺点:不能跨平台

3.创建存储过程基本语法:

create procedure 存储过程名

is

begin

创建语句

end;

例子:

create procedure emp_test is

begin

insert into emp(empno,ename) values (2343,'小白是土鳖');

end;

/

//执行存储过程:

exec/call emp_test;


4.存储过程中的参数是先写参数名,再写参数类型

create procedure del_emp(in_empno number )

is

begin

delete from emp where empno=in_empno;

end;

/

//执行存储过程:

exec del_emp(2345);

5.pl/sql 可以做什么?

利用pl/sql 可以开发过程,函数,包(包体),触发器,他们的基本编程单元是块

6.编写规范:

①注释

单行注释 --

多行注释: /* */

②标识符号的命名规范:

1)定义变量时,建议使用v_作为前缀,如:v_sal

2)定义常量时,建议用c_作为前缀,如:c_rate (constant)

3)定义游标时,建议用_cursor作为后缀,如:emp_cursor

4)定义例外时,建议用e_作为前缀,如:e_error (exception)


7.pl/sql块的介绍:

块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块。

要完成相对简单的应用功能,可能只需要编写一个块,但是如果要实现比较复杂的功能,可能要在一个pl/sql块中嵌套其他的pl/sql块

8.块的组成部分:

有三部分组成:定义部分,执行部分,例外处理部分。如下所示:

declare

/*定义部分:-----定义常量,变量,游标,例外,复杂数据类型*/

begin

/*执行部分-----要执行的pl/sql语句,和sql语句*/

exception

/*例外处理部分:-----处理运行的各种错误*/

end;

9:dbms_output 是oracle所提供的包(类似java里面的开发包,)

该包包含一些过程,put_line 就是dbms_output包的一个过程

单引号

只有执行过程的块:

set serveroutput on; --设置输出

begin

dbms_output.put_line('hello,world');

end;

/

有定义变量部分和执行过程的块:

declare

--定义变量的格式是:变量名称 变量的类型

v_ename varchar2(16);

begin

select ename into v_ename from emp where empno=&empno;--把查询的ename值放入v_ename

--输出v_ename

dbms_output.put_line('雇员名是'||v_ename); --||是oracle里面的拼接

end;

/

【注意】块执行完后就没有了

将上面的语句改为存储过程:

create procedure emp_pro2(in_empnum number) is

--定义变量的格式是:变量名称 变量的类型

v_ename varchar2(16);

begin

select ename into v_ename from emp where empno=in_empnum;--把查询的ename值放入v_ename

--输出v_ename

dbms_output.put_line('雇员名是'||v_ename); --||是oracle里面的拼接

end;

/

3.实例3包含定义部分,执行部分,和例外处理部分

为了避免pl/sql程序的运行错误,提高pl/sql的健壮性,应该对可能的错误进行处理,这个很有必要:

①比如实例2中,如果输入了不存在的雇员号,应当做例外处理

②有时出现异常,希望用另外的逻辑处理:比如如果不存在,就加入编号为1,名字为“马大哈”这个人

4.案例:包含定义部分,执行部分,例外处理部分

declare

v_ename varchar2(32);

begin

select ename into v_ename from emp where empno=&empno;

--输出用户的名字

dbms_output.put_line('雇员名'||v_ename);

exception

when no_data_found then

dbms_output.put_line('你输入的编号有误');

end;

/

//异常处理的语法

exception

when 异常的名称 then

//对异常处理的代码

//对异常处理的代码

when 异常的名称 then

//对异常处理的代码

end;

//【可以使用异常处理进行业务逻辑的处理】

4.存储过程的输入变量和输出变量:

create procedure 过程名

(变量名 in 变量类型……,变量名 out 变量类型……)

is

//这里可以定义变量

begin

end;

【注意】如果没有指名变量的in/out,默认为in

in/out 均可以有多个

如:

create procedure pro5

(in_ename in varchar2,in_new_sal in number)--varchar2不用指定长度,因为形参里面不能有()

is

begin

update emp set sal=in_new_sal where ename=in_ename;

end;

//oracle中查看错误:show error

调用存储过程:exec/call pro5

案例代码:

/*set serveroutput on;--设置输出

begin

dbms_output.put_line('小白你妹');

end;

*/

/*

declare

--定义变量

v_ename varchar2(32);

begin

select ename into v_ename from emp where empno='&empno';

--输出v_ename

dbms_output.put_line(v_ename);

end;

*/

/*

create procedure output_test(in_empno number) --输入变量名不要跟字段名相同,否则报错ORA-01422

is

v_ename varchar2(32);

begin

select ename into v_ename from emp where empno=in_empno;

--输出v_ename

dbms_output.put_line(v_ename);

end;

*/

--定义异常处理部分

/*

declare

v_ename varchar(32);

begin

select ename into v_ename from emp where empno='&empno';

dbms_output.put_line('雇员名字'||v_ename);

exception

when no_data_found then

dbms_output.put_line('输入的编号有错');

end;

*/



create procedure params_emp

(in_ename in varchar2,in_sal in number)

is

begin

update emp set sal=in_sal where ename=in_ename;

end;

--参数中如果有()

/*

SQL> show error;

Errors for PROCEDURE SCOTT.PARAMS_EMP:



LINE/COL ERROR

-------- -----------------------------------------------------------------------------------------------------------------

2/22 PLS-00103: 出现符号 "("在需要下列之一时: := . ) , @ % default character 符号 ":=" 被替换为 "(" 后继续。

--oracle中查看错误:show error

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: