PLSQL编程
- 概念和目的
- 什么是PLSQL
PL/SQL(Procedure Language/SQL)
PLSQL是Oracle 对sql语言的过程化扩展(类似与Basic)
指在SQL命令语言中增加了过程处理语句(如分支,循环等),使SQL语言具有过程处理能力。 - 程序结构
通过PLSQL Developer 工具的Test Window 创建程序模板或者通过语句SQL window编写
提示:PLSQL语言的大小写是不区分的。
PL/SQL可以分为三 部分:声明部分,可执行部分,异常处理部分。
Declare
-- 声明变量 游标
I integer
BEGIN
-- 执行语句
-- 【异常处理】
END;
其中Declare部分用来声明变量或者游标(结果集类型变量),如果程序中无变量声明可以省略。
- 输出Hello Word
begin
-- Test statements here(-- 注释)
dbms_output.put_line('hello word');
end;
F8 执行结果:
CMD 命令窗口 模式运行:
:执行结束后并未输出结果,默认情况下,输出选项是关闭状态,我们需要开启一下,set serveroutput on
- 变量
PLSQL编程中常见的变量分两大类:
1 普通数据类型(char,varchar2,date,number,boolean,long);
2 特殊变量类型(引用型变量,记录型变量);
声明变量的方式为:
变量名 变量类型(变量长度) 例如:v_name varchar2(20);
—普通型变量:
变量赋值的方式有两种:
1 直接赋值语句 :=
v_name varchar2(20) :=‘lisi’;
2 语句赋值,使用select …into…赋值(语法select 值 into 变量)
select ename,sal into v_name,v_sal from emp where empno=7898;
例如:
打印人员信息,包括:姓名,薪水,地址
-- 打印人员信息,包括:姓名,薪水,地址
declare
-- Local variables here
-- 姓名
v_name varchar2(20) :='lisi';
-- 薪水
v_sal number;
-- 地址
v_addr varchar2(200);
i integer;
begin
-- Test statements here
dbms_output.put_line('hello word');
-- 直接赋值
v_sal :=1500;
-- 语句赋值
select '上海昆山' INTO v_addr from dual;
-- 输出语句
dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal||'地址:'||v_addr);
end;
输出结果集:
— 引用变量
变量的类型和长度取决于表中字段的类型和长度。
通过表名.列名%TYPE 指定变量的类型和长度.
例如:v_name emp.ename%TYPE;
【实例】 查询emp 表中7839 员工的个人信息,打印姓名和薪水
- 普通变量必须知道表中的字段类型和长度才能确定变量的长度和类型
-- 查询emp表中7839号员工的个人信息,打印姓名和薪水
declare
-- Local variables here
-- 姓名
v_name varchar2(20);
-- 薪水
v_sal number;
begin
-- Test statements here
-- 语句赋值
select ename,sal into v_name,v_sal from emp where empno=7898;
-- 输出语句
dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);
end;
结果:
— 使用引用变量的好处
- 使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑列的类型,使用%TYPE是非常好的编程风格,因为它使得PL/SQL更加的灵活。更加适应于对数据库定义的更新。
-- 查询emp表中7839号员工的个人信息,打印姓名和薪水
declare
-- Local variables here
-- 姓名
v_name emp.ename%TYPE;
-- 薪水
v_sal emp.sal%TYPE;
begin
-- Test statements here
-- 语句赋值
select ename,sal into v_name,v_sal from emp where empno=7898;
-- 输出语句
dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);
end;
- 记录类型变量
接收表中的一整行记录,相当于Java中的一个对象。
语法:变量名称 表名%ROWTYPE,
例如:v_emp emp%rowtype;
----查询并打印7898 的姓名和薪水
-- 查询emp表中7898号员工的个人信息,打印姓名和薪水
declare
-- Local variables here
-- 记录型变量
v_emp emp%ROWTYPE;
begin
-- Test statements here
-- 语句赋值
select * into v_emp from emp where empno=7897;
-- 输出语句
dbms_output.put_line('姓名:'||v_emp.ename||',薪水:'||v_emp.sal);
end;