简介
–常用变量类型
1. binary_integer: 整数,主要用来计数而不是用来表示字段类型,效率高
2. number: 数字类型
3. char: 定长字符串
4. varchar2: 变长字符串
5. date: 日期
6. long: 长字符串,最长2GB
7. boolean: 布尔类型,可以取值为ture、false和null值,一定要给初值,无法打印
1.hello world
set serveroutput on
declare
--说明部分
begin
--程序
dbms_output.put_line('Hello World');
end;
/
2.if语句
--判断用户从键盘输入的数字
set serveroutput on
--接收键盘输入
--num: 地址值,在该地址上保存了输入的值
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;
/
3.loop循环
--打印1~10
set serveroutput on
declare
pnum number := 1;
begin
loop
--退出条件
exit when pnum > 10;
dbms_output.put_line(pnum);
--加一
pnum := pnum + 1;
end loop;
end;
/
4.while循环
set serveroutput on
declare
j binary_integer := 1;
begin
while j < 11 loop
dbms_output.put_line(j);
j := j + 1;
end loop;
end;
5.for循环
--example1
set serveroutput on
declare
begin
for k in 1..10 loop
dbms_output.put_line(k);
end loop;
end;
--example1
set serveroutput on
declare
begin
for k in reverse 1..10 loop
dbms_output.put_line(k);
end loop;
end;
6.光标
--查询并打印所有员工的姓名和薪水
/*
1. 光标的属性
%isopen %rowcount(影响的行数)
%notfound %found
2. 每个会话,一次性只能打开300个光标
SQL> show parameter cursor
NAME TYPE VALUE
------------------------------------ ----------- ---------
cursor_sharing string EXACT
cursor_space_for_time boolean FALSE
open_cursors integer 300
session_cached_cursors integer 20
修改
alter system set open_cursors=400;
*/
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;
/
7.带参数的光标
--查询某个部门的员工姓名
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;
/
8.记录型变量
--查询并打印7839的姓名和薪水
set serveroutput on
declare
--定义记录型变量:代表一行
emp_rec emp%rowtype;
begin
select * into emp_rec from emp where empno=7839;
dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);
end;
/
9.引用型变量
--查询并打印7839的姓名和薪水
set serveroutput on
declare
--定义变量保存姓名和薪水
--pename varchar2(20);
--psal number;
pename emp.ename%type;
psal emp.sal%type;
begin
--得到7839的姓名和薪水
select ename,sal into pename,psal from emp where empno=7839;
--打印
dbms_output.put_line(pename||'的薪水是'||psal);
end;
/
10.异常(例外)
--被0除
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;
/
11.自定义异常
--查询50号部门的员工姓名
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;
/