1、使用pl-sql 输出helloworld
set serveroutput on---开始控制台输出
declare
--说明部分
begin---plsql核心开始
--程序
dbms_output.put_line('Hello World');
end;--plsql 核心结束
/---必须写这个斜杠
2、使用pl-sql 实现从键盘输入数字
--判断用户从键盘输入的数字
set serveroutput on
--接收键盘输入
--num: 地址值,在该地址上 保存了输入的值
accept num prompt '请输入一个数字';
declare
--定义变量保存输入的数字
pnum number := &num
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;
/
3、使用pl-sql 结合光标
--查询并打印员工的姓名和薪水
/*
1. 光标的属性:
%isopen %rowcount (影响的行数)
%found %notfound
2. 默认,一个会话中只能打开300个光标
SQL> show parameter cursor
NAME TYPE VALUE
------------------------------------ -------------------------------- -----------
cursor_sharing string FORCE
cursor_space_for_time boolean FALSE
open_cursors integer 300
session_cached_cursors integer 20
修改: alter system set open_cursors=400;
3. (思考):cursor_sharing 什么作用?---> 性能优化
EXACT(默认), FORCE, SIMILAR
*/
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 没有取到记录;
exit when cemp%notfound;
dbms_output.put_line(pename||'的薪水是'||psal);
end loop;
--关闭光标
close cemp;
end;
/
4、使用pl-sql 带参数的光标
--查询某个部门的员工姓名
set serveroutput on
declare
cursor cemp(dno number) is select ename from emp where deptno=dno;
pename emp.ename%type;
begin
open cemp(20);
loop
fetch cemp into pename;
exit when cemp%notfound;
dbms_output.put_line(pename);
end loop;
close cemp;
end;
/
5、使用pl-sql 纪录变量
set serveroutput on
declare
--定义记录型变量:代表一行
emp_rec emp%rowtype;
begin
select * into emp_rec from emp where empno=id(具体Id);
dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);
end;
/
6、使用pl-sql 异常
set serveroutput on
declare
pnum number;
begin
pnum := 1/0;
exception
when zero_divide then dbms_output.put_line('1:0不能做分母');
dbms_output.put_line('2:0不能做分母');
when value_error then dbms_output.put_line('算术或者转换错误');
when others then dbms_output.put_line('其他例外');
end;
/
7、自定义异常
set serveroutput on
declare
cursor cemp is select ename from emp where deptno=50;
pename emp.ename%type;
--自定义例外
no_emp_found exception;
begin
open cemp;
--取第一条记录
fetch cemp into pename;
if cemp%notfound then
--抛出例外
raise no_emp_found;
end if;
--pmon: process monitor
close cemp;
exception
when no_emp_found then dbms_output.put_line('没有找到员工');
when others then dbms_output.put_line('其他例外');
end;
/
8、 引用型变量
set serveroutput on
declare
--定义变量保存姓名和薪水
--pename varchar2(20);
--psal number;
pename emp.ename%type;
psal emp.sal%type;
begin
--得到姓名和薪水
select ename,sal into pename,psal from emp where empno=7839;
dbms_output.put_line(pename||'的薪水是'||psal);
end;
/
9、使用pl-sql循环
set serveroutput on
declare
pnum number := 1;
begin
loop
--退出条件
exit when pnum > 10;
dbms_output.put_line(pnum);
--加一
pnum := pnum + 1;
end loop;
end;
/