PL/SQL编程

PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。

PL/SQL块的结构如下:

DECLARE
–声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数
BEGIN
– 执行部分: 过程及SQL 语句 , 即程序的主要部分
EXCEPTION
– 执行异常部分: 错误处理
END;

数据类型

基本数据类型+pl/sql扩展的数据类型
number() int integer (只是用pl/sql编程,数据库不可用)

两种赋值语句:

1、 :=
2. select …into (只能一对一赋值,否则出现异常)

%ROWTYPE

PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。
使用%ROWTYPE特性的优点在于:
l 所引用的数据库中列的个数和数据类型可以不必知道;
l 所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

%TYPE

定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE。
使用%TYPE特性的优点在于:
所引用的数据库列的数据类型可以不必知道;
所引用的数据库列的数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

oracle 语言逻辑

条件分支: if, case
循环:loop , while, for
与c语言,java语法格式不一样(见下面的代码块)

  --最小的pl/sql块
declare 
        a int;
        b int;
begin 
      a:=10;   --赋值
      select sal into b from emp where empno=7369;
      dbms_output.put_line(a);
      dbms_output.put_line(b);    
end;

--标准PL/SQL
declare
       a number(7,2);
begin
       a:=10.12;
       select sal into a from emp; --没有where条件会有多条数据赋值,出错
      dbms_output.put_line(a);
      exception
         when others then dbms_output.put_line('出错了');   
end;

select * from emp;


--%type属性
declare 
        a emp.sal%type;  --把emp表sal字段的类型给a
        b int;
begin
     b:=&工号;
     select sal into a from emp where empno=b;
     dbms_output.put_line('工资:'||a);
end;


--%rowtype属性
declare 
        a emp%rowtype;  --把emp表所有字段的类型给a
        b int;
begin
     b:=&工号;
     select * into a from emp where empno=b;
     dbms_output.put_line('工资:'||a.sal||'   姓名'||a.ename);
end;


--if 
declare 
        b int;
begin
     b:=&输入成绩;
     if b>=60 then  
     dbms_output.put_line('及格');
     else 
      dbms_output.put_line('不及格');
     end if;
end;

--多重if
declare 
        b int;
begin
     b:=&输入成绩;
     if b<60 then  
     dbms_output.put_line('不及格');
     elsif b<=70 then
     dbms_output.put_line('及格');
      elsif b<=80 then
      dbms_output.put_line('良好');
       else
        dbms_output.put_line('优秀');
     end if;
end;


--case 相当于swicth
declare 
        b varchar2(20);
begin
     b:='&输入考试等级';
case  b
     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('输入不正确');
      end case;
end;

create table ttt (tid int)
--loop 天生就是一个死循环
declare 
        i int;
begin
        i:=1;
        loop
        if i=10 then
        exit;
        end if;
        insert into ttt values(i);
        i:=i+1;
        end loop;
end;



select * from ttt;
select count(*) from ttt;

--while循环

declare 
        i int;
begin
        i:=1;
        while i<10 loop
        insert into ttt values(i);
        i:=i+1;
        end loop;
end;

--for

declare 
        i int;
begin
       for i in 1..100 loop
        insert into ttt values(i);
        end loop;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值