PL/SQL编程
pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入式sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误。这样使得他的功能变的更强大。缺点是移植性不好。
编写一个存储过程,向表中添加数据。
1. create table mytest (name varchar2(30),passwd varchar2(30));
2. create or replace procedure xxc_pro1 is
begin
insert into mytest values ('小红','m123');
end;
3. 调用过程 exec 过程名(参数1,参数2…)或call 过程名参数1,参数2…)
① exec xxc_pro1; 或者是
② call xxc_pro1;
pl/sql可以做什么?
块:包括过程、函数、触发器、包。
编写规范:
1. 注释 --:单行注释
eg:select * from emp where empno=7788;--取得员工信息
/*……*/多行注释
2. 表示符号(变量)的命名规范:
① 当定义变量时,建议用v_作为前缀:v_ename
② 当定义常量时,建议用c_作为前缀:c_rate
③ 当定义游标时,建议用_cursor作为后缀:emp_cursor
④ 当定义例外时,建议用e_作为前缀:e_error
块(block)是pl/sql的今本程序单元,编写pl/sql程序实际上就是在编写pl/sql块;pl/sql块由三部分组成:定义部分,执行部分,例外处理部分。
declare --可选部分
/*定义部分:定义常量,变量,游标,例外,复杂数据类型*/
begin --必选部分
/*执行部分:要执行的pl/sql语句和sql语句*/
exception --可选部分
/*例外处理部分:处理运行的各种错误*/
实例1:只包含执行部分的pl/sql块
SQL> set serveroutput on --打开输出
SQL> begin
2 dbms_output.put_line('hello');
3 end;
4 /
说明:dbms_output是oracle提供的包,该包包含一些过程,put_line就是其中之一。
实例2:包含定义部分和执行部分
SQL> declare
2 v_ename varchar2(5);
3 begin
4 select ename into v_ename from emp where empno = &no;
5 dbms_output.put_line('雇员名'||v_ename);
6 end;
7 /
说明:&:从控制台输入变量,会弹出一个对话框。
实例3.同时输出雇员名和工资
SQL> declare
2 v_ename varchar2(20);
3 v_sal number(10,2);
4 begin
5 select ename,sal into v_ename,v_sal from emp where empno=&no;
6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal);
7 end;
8 /
包含定义,执行,和例外处理的pl/sql块。
实例4.当输入的员工号不存在时
SQL> declare
2 v_ename varchar2(20);
3 v_sal number(10,2);
4 begin
5 select ename,sal into v_ename,v_sal from emp where empno =&no;
6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal);
7 exception --异常处理部分
8 when no_data_found then
9 dbms_output.put_line('请输入正确的员工号!');
10 end;
11 /
以上为块的基础,下面来介绍块的各个组成:过程,函数,触发器,包。
过程
过程用于执行特定的操作,当执行过程的时候,可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,在pl/sql中可以使用create procedure命令来创建过程。
1