Procedure Language主要是oracle对语言能力的增加,让if语言有了条件判断,和for循环的处理能力,
语法 :主要分为俩部分,声明部分,逻辑部分
declare
//这是声明部分
begin
//这是逻辑部分
end; //结束,
下面我们就来输出一句话, ‘hello word’
declare
str varchar2(20) := 'hello world' //声明一个字符串变量,并且赋值
begin
dbms_output.put_line(str);
end;
输出结果如下
学习玩输出语句后,我们做一个小练习
-- 输出7369的工资
declare
--声明一个变量
str emp.sal%type; --类型的话,这样写类型就跟表中的sal类型一致了
begin
select sal into str from emp where empno = 7369;
dbms_output.put_line(str);
end;
– 输出7369的部门和姓名
declare
str emp%rowtype; --这样写就相当于是一个对象类型
begin
select * into str from emp where empno = 7369;
dbms_output.put_line(str.empno||' '||str.ename);
-- '||' 符号主要是用来拼接字符串的
end;
输出结果如下
if条件判断
语法
if 条件 than
elsif 条件 than
else
– 根据不同年龄输出信息
declare
age number := &aaa; --这样写的意思相当是 scanner,值是用户输入的
begin
if age > 18 then
dbms_output.put_ling('未成年人');
elsif age > 48 then
dbms_output.put_line('中年人');
else
dbms_output.put_line('长辈');
end if;
end;
运行结果如下
输出结果如下, 想必大家猜到我输入的是什么了,永远十八岁,
三种循环
- while循环
- for循环
- loop循环
while循环演示
declare
i number := 1;
begin
while i <= 10 loop
dbms_output.out_line(i);
i := i + 1;
end loop;
end;
运行结果如下
for循环
语法
for 变量名 in 起始值..结束值 loop
end loop;
使用for我们不用声明变量,因为底层会帮我们声明
declare
begin
for i in 1..10 loop
dbms_output.put_line(i);
end loop;
end;
运行结果如下
loop循环
语法
loop
输出语句
--根据条件来退出循环
exit when 条件
end loop;
代码演示
declare
n number := 1;
begin
loop
dbms_output.put_line('pipixia :'||n);
exit when n>10;
n := n+1;
end loop;
end;
输出结果 如下
游标
相当是对结果集的封装, 相当于是jdbc中的ResultSet
语法:
声明 游标
cursor 游标名 is 查询语句
cursor 游标名(参数名 参数类型) is 查询语句 where empno=参数名
demo
declare
--声明游标
cursor demo is select * from emp;
--声明变量
vrow emp%rowtype;
begin
--打开游标
open demo;
loop
fetch demo into vrow;
exit when demo%notfound;
dbms_output.put_line(vrow.ename);
end loop;
--关闭游标
close demo;
end;
查询结果如下
需求
– 输出指定部门的员工信息
declare
--声明游标
cursor demo(v_deptno number ) is select * from emp where deptno = v_deptno;
--声明常量
v_row emp%rowtype;
begin
--开启角标
open demo(10);
--开启循环
loop
--移动角标
fetch demo into v_row;
--如果没有查询到,就退出循环
exit when demo%notfound;
--输出打印
dbms_output.put_line(v_row.ename);
end loop; --循环末尾
--关闭角标
close demo;
end;
输出结果如下
游标练习
– 按照职位涨工资,总裁涨1000 , 经理涨800 , 其他人涨400
/*
遍历所有员工,如果是总裁,涨1000;
如果是经理 涨800
群众涨400
*/
declare
--声明游标
cursor demo is select * from emp;
--声明常量
v_row emp%rowtype;
begin
--开启游标
open demo;
loop
--移动角标
fetch demo into v_row;
--如果没有发现就退出循环
exit when demo%notfound;
--如果工作是 涨800
if v_row.job = 'MANAGER' then
update emp set sal = sal + 800 where empno = v_row.empno;
--如果工作是boss 涨1000
elsif v_row.job = 'PRESIDENT' then
update emp set sal = sal + 800 where empno = v_row.empno;
else
--涨400
update emp set sal = sal + 400 where empno = v_row.empno;
end if;
end loop;
--关闭游标
close demo;
--提交事务
commit;
end;
扩展: 使用for循环遍历游标
declare
--声明游标
cursor demo is select * from emp;
begin
--遍历游标
for v_row in demo loop;
dbms_output.put_line(v_row.ename);
end loop;
以上就是一些简单的知识,多敲敲就会了,,每个语言刚开始都是痛苦的,,,