oracle学习(七)PLSQL

一、什么是PLSQL

我们常用SQL语句到数据库中查询我们想要的数据。SQL(也叫SQL99)是操作所有关系型数据库的规则。

像Oracle   DB2  SQLServer  MySQL  等等,这些数据库都是支持SQL99。

而PLSQL就是Oracle数据库服务器对SQL99进行了符合自身特点的扩展。

所以可理解为 PLSQL语法 = SQL语法 + oracle自身的语法。

二、为什么有了SQL,还需要PLSQL?

因为SQL强调结果,来一条SQL语句,就显示出相应结果

而PLSQL则强调过程,二者互相弥补。

三、PLSQL程序的完整组成结构如下:

[declare]             (可写)
   变量声明;
begin
   DML/TCL操作;
[exception]           (可写)
   例外处理;
end;
/

注意:在PLSQL程序中,;号表示每条语句的结束,/表示整个PLSQL程序结束

例子:

set serveroutput on;   --设置显示PLSQL程序的执行结果,默认情况下,不显示PLSQL程序的执行结果
-- 在一次会话中有效

--向SQLPLUS客户端工具输出字符串
begin
    dbms_output.put_line('hello 你好');
end;
/

四、PLSQL类型

// 变量i,数值类型,不超过99
i  nubmber(2);

// 变量j,数值类型,不超过999,默认值为100
j  number(3):=100;


message  varcher(12) := '哈哈';

// pname的类型与emp表的ename字段相同
pname  emp.ename%type;

// pemp的类型和emp的表结构一致,通过pemo.字段名获取相应字段
pemp  emp%rowtype;

五、PLSQL判断和循环
 

if 条件  then 语句1;
语句2;
end if;


if 条件  then 语句1;
else   语句2;
end if;


if 条件  then 语句;
elsif 语句 then 语句;
else 语句;
end if;

   

Loop
  exit when 语句;
   语句 
   语句
end loop;



while 语句
loop
  语句
  语句
end loop;


for i in 20 .. 30    // 这两个点是固定写法,不用自++
loop
  语句
  语句
end loop;

六、PLSQL游标

类似于JDBC中的ResultSet对象的功能,从上向下依次获取每一记录的内容

--使用无参光标cursor,查询所有员工的姓名和工资
--【如果需要遍历多条记录时,使用光标cursor,无记录找到使用cemp%notfound】
declare
    --定义游标
    cursor cemp is select ename,sal from emp;
    --定义变量
    vename emp.ename%type;
    vsal   emp.sal%type;
begin
    --打开游标,这时游标位于第一条记录之前
    open cemp;
    --循环
    loop
       --向下移动游标一次
       fetch cemp into vename,vsal; 
       --退出循环,当游标下移一次后,找不到记录时,则退出循环
       exit when cemp%notfound;
       --输出结果
       dbms_output.put_line(vename||'--------'||vsal);
    end loop;
    --关闭游标
    close cemp;
end;
/
--使用带参光标cursor,查询10号部门的员工姓名和工资
declare
    cursor cemp(pdeptno emp.deptno%type) is select ename,sal from emp where deptno=pdeptno;
    pename emp.ename%type;
    psal emp.sal%type; 
begin 
    open cemp(&deptno);
    loop
        fetch cemp into pename,psal;	 
        exit when cemp%notfound;
        dbms_output.put_line(pename||'的薪水是'||psal);
    end loop;
    close cemp;
end;
/

猜你喜欢

转载自blog.csdn.net/quge_name_harder/article/details/87829066