1、PLSQL编程
(1)PLSQL:Procedural Language/SQL(过程化sql语言)是对sql的一个扩展,让我们能够用sql写一些逻辑代码,比如循环,判断等!
(2)语法:
A、声明变量:declare 变量名 变量类型 :=初始化值
B、输出语句:dbms_.put_linne()
如:
declare
i varchar2(20) := 'melo';
begin
dbms_output.put_line(i);
end;
结果:
C、引用类型的变量: 变量名 表名%rowtype 表啊是某个表中一行数据的数据类型
如a:查询1008的工资
代码:
declare
vsal emp.sal%type; --表示某一列的数据类型
begin
--将查询结果赋值给vsal
select sal into vsal from emp where empno = 1008;
dbms_output.put_line(vsal);
end;
结果:
b:查询1007的姓名和工资
declare
em emp%rowtype;
begin
select * into em from emp where empno = 1007;
dbms_output.put_line('姓名:'||em.ename||', 工资:'||em.sal);
end;
结果:
D、条件判断:
if xxx then xxx else if xxx then xxx else xxx end if;
如:根据不同年龄输出不同信息
代码:
declare
age int := 40;
begin
if age<18
then dbms_output.put_line('小屁孩');
elsif age < 30
then dbms_output.put_line('年轻人');
else
dbms_output.put_line('不知道什么人');
end if;
end;
结果:
E、PLSQL的循环:
A、while:
while 条件 loop xxxxxx end loop;
B、for
for 变量名 in [reverse] 起始值…最终值 loop xxxxxxx 修改变量语句 end loop;
C、loop:
loop exit when 条件 xxxxxxx 修改变量语句 end loop;
如:输出1-10:
--输出1到10
--while循环
declare
i int :=1;
begin
while i <=10
loop
dbms_output.put_line(i);
i:= i+1;
end loop;
end;
--for循环
declare
i int :=1;
begin
for i in 1..10
loop
dbms_output.put_line(i);
end loop;
end;
--loop循环
declare
i int :=1;
begin
loop exit when i>10;
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
结果都是一样的:
2、游标
游标是用来操作查询结果集的,相当于jdbc中的ResultSet
(1)语法(普通游标):cursor 游标名[参数名 参数类型] is 查询结果集
(2)操作步骤:
声明游标 ——> 打开游标(open 游标名) ——> 从游标中取数据(fetch 游标名 into 变量 : ) ——> 关闭游标(close 游标名)
如:游标查询所有员工的姓名和工资
--用游标查询所有员工
declare
--声明游标
cursor cur is select * from emp;
--声明变量,记录一行数据
vrow emp%rowtype;
begin
--打开游标
open cur;
--从游标中取数据
--循环取
loop
fetch cur into vrow;
exit when cur%notfound;
dbms_output.put_line('姓名:'||vrow.ename||',工资:'||vrow.sal);
end loop;
--关闭游标
close cur;
end;
结果:
再比如查询指定部门的员工姓名和编号:
declare
--声明游标
cursor cur (dno number) is select * from emp where deptno = dno;
--声明变量,记录一行数据
vrow emp%rowtype;
begin
--打开游标
open cur(20);
--从游标中取数据
--循环取
loop
fetch cur into vrow;
exit when cur%notfound;
dbms_output.put_line('姓名:'||vrow.ename||',工资:'||vrow.sal);
end