oracle中pl/sql编程-笔记

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
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值