一、PL/SQL简介
- pl/sql编程语言是对sql语言的扩展,使得sql语言具有过程化编程的特性。
- pl/sql编程语言比一般的过程化编程语言,更加灵活高效。
- pl/sql编程语言主要用来编写存储过程和存储函数等。
二、PL/SQL基础语法
1、基本结构
DECLARE --声明部分
声明语句
BEGIN --执行部分
执行语句
EXCEPTION --异常处理部分
执行语句
END;2、声明语句
2.1、常量声明
- 语法:<变量名> CONSTANT 类型:=初始值;
- 实例:pi constant number(5,3):=3.14;
2.2、变量声明
基本类型
- 语法:<变量名> 类型[:=初始值];
- 实例:sal number(9,2) := 3000;
引用类型
- 语法:变量名 table_name.column_name%type;
- 实例:myname emp.ename%type;
记录类型
- 语法:变量名 table_name%rowtype;
- 实例:record emp%rowtype;
赋值
使用:=赋值:num := 100;
使用into查询语句
- 语法:使用SELECT <列名> INTO <变量名> FROM <表名> WHERE <条件>
- 实例:select * into test from emp where empno=7788;
3、控制语句
3.1、条件控制
IF 条件 THEN 语句1; 语句2; END IF;
---输入小于18的数字,输出未成年
declare
i number(3) := ⅈ
begin
if i<18 then
dbms_output.put_line('未成年');
end if;
end;IF 条件 THEN 语句序列1; ELSE 语句序列 2; END IF;
---输入小于18的数字,输出未成年
---输入大于18的数字,输出成年人
declare
i number(3) := ⅈ
begin
if i<18 then
dbms_output.put_line('未成年');
else
dbms_output.put_line('成年人');
end if;
end;IF 条件 THEN 语句; ELSIF 语句 THEN 语句; ELSE 语句; END IF;
---输入小于18的数字,输出未成年
---输入大于18小于40的数字,输出中年人
---输入大于40的数字,输出老年人
declare
i number(3) := ⅈ
begin
if i<18 then
dbms_output.put_line('未成年');
elsif i<40 then
dbms_output.put_line('中年人');
else
dbms_output.put_line('老年人');
end if;
end;3.2、循环控制
LOOP 语句; EXIT WHEN <条件> END LOOP;
--输出1到10是个数字:
declare
i number(2) := 1;
begin
loop
exit when i>10;
dbms_output.put_line(i);
i := i+1;
end loop;
end;WHILE <条件> LOOP 语句; END LOOP;
--输出1到10是个数字:
declare
i number(2) := 1;
begin
while i<11 loop
dbms_output.put_line(i);
i := i+1;
end loop;
end;FOR <循环变量> IN 下限..上限 LOOP 语句; END LOOP;
--输出1到10是个数字:
declare
begin
for i in 1..10 loop
dbms_output.put_line(i);
end loop;
end;4、游标(Cursor)
4.1、定义语法
CURSOR <游标名> IS <SELECT 语句> [FOR UPDATE | FOR UPDATE OF 字段];
4.2、游标的操作
- 打开游标:OPEN <游标名>;
- 获取游标的值:FETCH <游标名> INTO 变量1,变量2,变量3,....变量n,; 或 FETCH <游标名> INTO 行对象;
- 关闭游标:CLOSE <游标名>;
4.3、游标的属性
- %NOTFOUND:如果FETCH语句失败,则该属性为"TRUE",否则为"FALSE";
- %FOUND:如果FETCH语句成果,则该属性为"TRUE",否则为"FALSE";
- %ROWCOUNT:返回游标当前行的行数;
- %ISOPEN:如果游标是开的则返回"TRUE",否则为"FALSE";
4.4、游标的使用
--给指定部门员工涨工资
declare
cursor c2(eno emp.deptno%type)
is select empno from emp where deptno = eno;
en emp.empno%type;
begin
open c2(10);
loop
fetch c2 into en;
exit when c2%notfound;
update emp set sal = sal - 100 where empno = en;
commit;
end loop;
close c2;
end;
版权声明:本文为yu1755128147原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。