1.pl/sql 是过程语言与结构化查询语言的结合。sql语言能实现的
2.pl/sql编程中包含哪些技术?
打印输出,变量使用,选择结构,循环结构
3.pl/sql组合:三部分组合
(1)声明(定义)部分
(2)可执行部分
(3)异常处理部分(在可执行部分中包裹)
其中第二个模块是必须的,而第一个和第三个是可选(根据需求而定)。
4.语法
declare--声明部分
属性名 属性类型;
....
begin---可执行部分的开始位置
利用sql语句执行得到的结果集可以通过特定方式将结果赋值给上面declare所定义的变量中.
异常处理部分
end;---可执行部分的结束位置
---------------------------------------------------------------------------------------------------------------------------------
例一:
定义一个变量保存一个姓名,然后打印输出张三
declare
sname varchar2(50);
begin
--变量的赋值:=
sname := '张三';
dbms_output.put_line(sname);
end;
//
例二:
oracle中的输入器 & 包裹在单引号中。
declare
sname varchar2(50):='&请输入';
ssex varchar2(2):='男';
(可在定义变量时赋值)
begin
dbms_output.put_line('我的姓名是:'||sname||',我的性别是: '||ssex);
end;
//
例三:
打印输出7369的姓名以及薪水
declare
myempno number:=7369;
myename varchar2(100);
mysal number;
begin
--语法: select aa into bb from 表
select ename,sal into myename,mysal from emp where empno = myempno;
dbms_output.put_line('薪水为: '||mysal||' '||myename);
end;
---------------------------------------------------------------------------------------------------------------------------------
PL/SQL编程中的2个重要类型
属性类型 %type
行类型 %rowtype 相当于oop的对象
--打印输出7369的薪水(不确定类型)
declare
myempno emp.empno%type:=7369; ------- emp.empno%type => number
mysal emp.sal%type;
begin
select sal into mysal from emp where empno = myempno;
dbms_output.put_line(mysal);
end;
---------------------------------------------------------------------------------------------------------------------------------
#选择结构 if case
--需求:判断一个数字是否为偶数
then 如果满足,就执行下去;
when 当这个结果是什么的时候.
declare
mynum number:=10;
begin
if (mod(mynum,2)=0) then
dbms_output.put_line('偶数');
else
dbms_output.put_line('奇数');
end if;--结束选择结构
end;
//
例一:
--判断7369处于哪个级别
declare
myempno emp.empno%type:=7369;
mysal emp.sal%type;
begin
select sal into mysal from emp where empno = myempno;
--拿到mysal进行判断即可
if (mysal > 3000) then
dbms_output.put_line('纳税');
elsif (mysal = 3000) then
dbms_output.put_line('继续努力');
elsif(mysal < 3000) then
dbms_output.put_line('回家养猪');
end if;
end;
//
例二:
begin
case 'A'
when 'A' then dbms_output.put_line(‘优秀’);
when 'B' then dbms_output.put_line(‘良好’);
when 'C' then dbms_output.put_line(‘一般’);
when 'D' then dbms_output.put_line(‘不行’);
else
dbms_output.put_line('太low了');//默认
end case;
---------------------------------------------------------------------------------------------------------------------------------
例三:
loop循环语法:
/*
loop
end loop;
与java中的死循环一致 while(true){}
*/
--1-100的和
declare
mynum number:=1;
mysum number:=0;
begin
loop
<<myloop>>--命名
mysum:=mysum + mynum;
mynum:=mynum+1;
exit when mynum = 101;
end loop;
dbms_output.put_line(mynum);
end;
//
--while循环
declare
mynum number:=1;
begin
while (mynum<=100) loop
dbms_output.put_line(mynum);
mynum:=mynum+1;
end loop;
end;
//
--for循环最简洁
begin
for i in 1..100 loop
dbms_output.put_line(i);
end loop;
end;
=========================================================================
1.预设义异常:系统给定 no_data_found(未找到数据异常) too_many_rows(行太多异常)
2.自定义异常:raise抛出异常
(1)定义自定义异常 exception
(2) 根据需求判断后抛出异常 rais
(3)捕捉该异常 exception
declare
myempno number:=123;
mysal number;
begin
--语法: select aa into bb from 表
select sal into mysal from emp where empno = myempno;
dbms_output.put_line('薪水为: '||mysal);
excption
when no_date_found then
dbms_out.put_line((未找到数据异常);
when too_many_rows then
dbms_out.put_line((行太多异常);
end;
--查询指定编号的薪水,如果不在2000-5000之间,抛出自定义异常
declare
myempno emp.empno%type:=7369;
mysal emp.sal%type;
myExceptionSal exception;
begin
select sal into mysal from emp where empno = myempno;
if (mysal < 2000 or mysal > 5000) then
--抛出异常
raise myExceptionSal;
end if;
exception
when myExceptionSal then
dbms_output.put_line('未薪水不在指定的范围异常');
end;
=========================================================================
--函数 function 作用:一次封装多次利用
/*create or replace function 函数名称(差数列表)
return 返回类型
as | is
声明部分
可执行部分*/
--封装函数 根据指定的编号查找薪水
create or replace function getSalbyid(myempno emp.empno%type)
return emp.sal%type
as
mysal emp.sal%type;
begin
select sal into mysal from emp where empno=myempno;
return mysal;
end;
--调用函数
select getSalbyid(7369) from dual;