1.知识点:可以对照下面的录屏进行阅读
PL/SQL程序结构
declare
说明部分 (变量说明,光标申明,例外说明 〕
begin
语句序列 (DML语句〕…
exception
例外处理语句
End;
/
------------------------------------------------------------------
--第一个PL/SQL程序:HelloWorld
set serveroutput on --如果要在屏幕上输出信息,需要将serveroutput开关打开
declare
--变量的说明
begin
--程序体
--程序包package
dbms_output.put_line('Hello World');
end;
/
------------------------------------------------------------------
--引用型变量: 查询并打印7839的姓名和薪水
set serveroutput on
declare
--定义变量,
pename emp.ename%type; --将pename的类型设置为emp表中ename的类型
psal emp.sal%type; --将psal的类型设置为emp表中sal的类型
begin
--查询:
--ename,sal into pename,psal:将查询的ename,sal分别赋值给pename,psal按顺序赋值
select ename,sal into pename,psal from emp where empno=7839;
--打印
dbms_output.put_line(pename||'的薪水是'||psal);
end;
/
------------------------------------------------------------------
--记录型变量 查询并打印7839的姓名和薪水
set serveroutput on
declare
--定义变量,代表一行
emp_rec emp%rowtype;
begin
--得到一行,赋值给emp_rec
select * into emp_rec from emp where empno=7839;
dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);
end;
/
------------------------------------------------------------------
--if语句:判断用户输入的数字
set serveroutput on
/*
1.提示信息
2. 接收键盘输入
num 是一个地址值
SQL优化: num绑定变量(尽量使用绑定变量)
select * from emp where deptno=10; --> 执行计划
select * from emp where deptno=20; --> 执行计划
-->
select * from emp where deptno=#
*/
accept num prompt '请输入一个数字';
declare
--变量保存输入的数字
pnum number := #
begin
--判断
if pnum = 0 then
dbms_output.put_line('您输入的是0');
elsif pnum = 1 then
dbms_output.put_line('您输入的是1');
elsif pnum = 2 then
dbms_output.put_line('您输入的是2');
else
dbms_output.put_line('其他数字');
end if;
end;
/
------------------------------------------------------------------
--循环: 打印1~10,有3中方法,见下图
set serveroutput on
declare
pnum number := 1; --给pnum赋值1,pnum类型为number
begin
loop
--退出:成立退出,不成立循环
exit when pnum >
10;
--隐式转换,number转varchar2
dbms_output.put_line(pnum);
pnum := pnum + 1;
end loop;
end;
/
------------------------------------------------------------------
光标(Cursor)==ResultSet
说明光标语法:
CURSOR 光标名 [ (参数名 数据类型[,参数名 数据类型]...)]
IS SELECT 语句;
用于存储一个查询返回的多行数据
例如:
cursor c1 is select ename from emp;
打开光标: open c1; (打开光标执行查询)
取一行光标的值:fetch c1 into pjob; (取一行到变量中)
关闭光标: close c1;(关闭游标释放资源)
注意: 上面的pjob必须与emp表中的job列类型一致:
定义:pjob emp.empjob%type;
------------------------------------------------------------------
--光标: 使用游标查询员工姓名和工资,并打印
/*
光标的3个属性:
%isopen 是否被打开:打开true,关闭false;
%rowcount 行数
%notfound 是否有值:没有值true,有值false;
*/
set serveroutput on
declare
--光标
cursor cemp is select ename,sal from emp;
pename emp.ename%type; --将用来接收的变量类型设置为和查询的类型相同
psal emp.sal%type;
begin
open cemp; --打开光标执行查询
loop
--从集合中取值
fetch cemp into pename,psal;
--光标中没有值时退出
exit when cemp%notfound;
dbms_output.put_line(pename||'的薪水是'||psal);
end loop;
close cemp;
end;
/
------------------------------------------------------------------
--光标练习:给员工涨工资 总裁1000 经理800 其他400
--光标同时能打开的最大数量默认为300个
/*
SQL> show parameters cursor
NAME TYPE VALUE
-