Oracle学习(十一):PL/SQL(一)

2014-11-24 09:09:07 · 作者: · 浏览: 3

1.知识点:可以对照下面的录屏进行阅读

PL/SQL程序结构
declare
      说明部分    (变量说明,光标申明,例外说明 〕
begin
      语句序列   (DML语句〕… 
exception
      例外处理语句   
End;
/
------------------------------------------------------------------
--第一个PL/SQL程序:HelloWorld
set serveroutput on	--如果要在屏幕上输出信息,需要将serveroutput开关打开
declare
  --变量的说明
begin
   --程序体
   --程序包package
   dbms_output.put_line('Hello World');
end;
/
------------------------------------------------------------------

--引用型变量: 查询并打印7839的姓名和薪水

set serveroutput on

declare 
  --定义变量,
  pename emp.ename%type;		--将pename的类型设置为emp表中ename的类型
  psal   emp.sal%type;	--将psal的类型设置为emp表中sal的类型

begin

  --查询: 
  --ename,sal into pename,psal:将查询的ename,sal分别赋值给pename,psal按顺序赋值
  select ename,sal into pename,psal from emp where empno=7839;
  
  --打印
  dbms_output.put_line(pename||'的薪水是'||psal);

end;
/
------------------------------------------------------------------

--记录型变量 查询并打印7839的姓名和薪水

set serveroutput on

declare 
  --定义变量,代表一行
  emp_rec emp%rowtype;
begin
  --得到一行,赋值给emp_rec
  select * into emp_rec from emp where empno=7839;

  dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);

end;
/
------------------------------------------------------------------
--if语句:判断用户输入的数字

set serveroutput on

/*
1.提示信息
2. 接收键盘输入
num 是一个地址值

SQL优化: num绑定变量(尽量使用绑定变量)
select * from emp where deptno=10;  --> 执行计划
select * from emp where deptno=20;  --> 执行计划
-->
select * from emp where deptno=#

*/
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;
/
------------------------------------------------------------------
--循环: 打印1~10,有3中方法,见下图

set serveroutput on

declare
  pnum number := 1;	--给pnum赋值1,pnum类型为number
begin
  loop
    --退出:成立退出,不成立循环
    exit when pnum >
10; --隐式转换,number转varchar2 dbms_output.put_line(pnum); pnum := pnum + 1; end loop; end; / ------------------------------------------------------------------ 光标(Cursor)==ResultSet 说明光标语法: CURSOR 光标名 [ (参数名 数据类型[,参数名 数据类型]...)] IS SELECT 语句; 用于存储一个查询返回的多行数据 例如: cursor c1 is select ename from emp; 打开光标: open c1; (打开光标执行查询) 取一行光标的值:fetch c1 into pjob; (取一行到变量中) 关闭光标: close c1;(关闭游标释放资源) 注意: 上面的pjob必须与emp表中的job列类型一致: 定义:pjob emp.empjob%type; ------------------------------------------------------------------ --光标: 使用游标查询员工姓名和工资,并打印 /* 光标的3个属性: %isopen 是否被打开:打开true,关闭false; %rowcount 行数 %notfound 是否有值:没有值true,有值false; */ 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; / ------------------------------------------------------------------ --光标练习:给员工涨工资 总裁1000 经理800 其他400 --光标同时能打开的最大数量默认为300个 /* SQL> show parameters cursor NAME TYPE VALUE -