一、PL/SQL语言的语法
1、基本语法结构
[declare] --声明
--可以在此声明 变量 常量 游标 异常
begin
--逻辑处理语句
[exception]
--异常处理语句 try catch
end;
2、变量和常量
:= 在PL/SQL中就是赋值的意思
%type 引用型变量,v_sal emp.sal%type; 意思是引用emp表中sal字段的数据类型给v_sal 这个变量
= 在PL/SQL中就相当于java中的 ==,是用来进行判断的
dbms_output.put_line(要打印的变量); 打印数据
%rowtype; 记录型变量,v_row emp%rowtype; 即将emp中的某一条数据,放入变量v_row中,此时变量可以使用.字段名,来进行查询数据
constant 常量 相当于Java final
-------声明变量和常量
declare
--java private int age=1;
v_age number(3):=1; --:=就是赋值 =相当于Java中的==
v_name varchar2(30):='sminth';
v_sal emp.sal%type:=100; --引用型变量
v_row emp%rowtype; --记录型变量
v_sex constant number(1):=1; --constant常量 相当于Java final
begin
--v_sex:=0; --常量在此赋值会报错
v_age:=100;
select ename,sal into v_name,v_sal from emp where empno=7788;
select * into v_row from emp where empno=7788;
dbms_output.put_line(v_row.ename||v_row.sal||v_row.job);
end;
3、if 分支
(1)、第一种语法
if 条件 then
逻辑处理语句
end if;
(2)、第二种语法
if 条件 then
逻辑处理语句
else
逻辑处理语句
end if;
(3)、第三种语法
if 条件 then
逻辑处理语句
elsif 条件 then
逻辑处理语句
elsif 条件 then
逻辑处理语句
...........
else
逻辑处理语句
end if;
(4)、示例:输入一个年龄数据,如果小于18,打印“未成年人”,18到60 成年人,60以上 老年人
declare
v_age number(4):=&sjdj;
begin
if v_age<18 then
dbms_output.put_line('未成年人');
elsif v_age>=18 and v_age<=60 then
dbms_output.put_line('成年人');
else
dbms_output.put_line('老年人');
end if;
end;
二、循环
1、无条件循环(常用)
语法:
loop
循环的内容
end loop;
示例:打印1到100个数
declare
v_num number:=1;
begin
loop
--if v_num>100 then
-- exit;
--end if;
exit when v_num>100;
dbms_output.put_line(v_num);
v_num:=v_num+1;
end loop;
end;
2、有条件循环
语法:
while 条件
loop
循环的内容
end loop;
示例:
declare
v_num number:=1;
begin
while v_num<=200
loop
dbms_output.put_line(v_num);
v_num:=v_num+1;
end loop;
end;
3、for循环
语法:
for 变量名 in 起始值 .. 终止值
loop
循环的内容
end loop;
示例:
begin
for v_num in 1..100
loop
dbms_output.put_line(v_num);
end loop;
end;
三、游标
1、什么是游标
游标是用来接受多个对象的
2、游标的定义语法
cursor 游标名称 is sql查询语句;
3、游标的使用语法
open 游标名称 ;
loop
fetch 游标名称 into 记录型变量 ; -- 使用关键字fetch将游标中的一条数据取出,使用into关键字将数据放入一个变量中
exit when 游标名称%notfound; -- 当游标中没有数据的时候,退出循环
end loop;
close 游标名称;
4、示例:打印所有员工的信息
declare
cursor c_emp is select * from emp;
v_row emp%rowtype;
begin
open c_emp;
loop
fetch c_emp into v_row;
exit when c_emp%notfound;
dbms_output.put_line(v_row.ename||'---'||v_row.job);
end loop;
close c_emp;
end;
5、示例:打印指定部门的员工的信息
declare
cursor c_emp(v_no number) is select * from emp where deptno=v_no;
v_row emp%rowtype;
begin
open c_emp(10);
loop
fetch c_emp into v_row;
exit when c_emp%notfound;
dbms_output.put_line(v_row.ename||'---'||v_row.job);
end loop;
close c_emp;
end;
四、异常
1、异常的作用
增强代码的容错性和健壮性
2、预定义异常
(1)、系统定义的异常
(2)、代码示例
declare
v_num number(6):=9;
v_name varchar2(1);
begin
--v_num:=1/0; -- ZERO_DIVIDE
v_name:='simth'; --VALUE_ERROR
exception
when ZERO_DIVIDE then -- 使用 when 捕获异常,使用 then 对异常进行处理,ZERO_DIVIDE是发生的异常类型
v_num:=0;
dbms_output.put_line(v_num);
-- when VALUE_ERROR then
when others then -- others相当于java中的Exception,即others代表了所有异常
v_name:='s';
dbms_output.put_line(v_name);
end;
3、自定义异常
--输入一个年龄,如果年龄超过150,抛异常“年龄太大,请检查数据”
declare
v_age number:=&age;
exc_age exception; --异常的声明方式,exc_age为异常名称
begin
if v_age >150 then
raise exc_age; -- 抛出异常使用raise关键词,相当于java中的throw
end if;
-- 以下
exception
when exc_age then
-- dbms_output.put_line('年龄太大,请检查数据');'
--错误窗口的弹出 oracle中 -20001至-29999 可以使用
raise_application_error(-20001,'年龄太大,请检查数据');
end;