Oracle(PLSQL编程)

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值