Oracle PL/SQL高级编程(块 过程 动态PL/SQL)

1.PLsql是什么?

PL/SQL(procdure language/sql) : 是对oracle标准的一个sql语言的扩展,是在oracle数据库上进行编程的语言。

2.为什么要用PL/SQL?

(1)SQL语句不能进行模块化编程, 例如淘宝:如果仅用sql语句的话,那么下一个订单可能需要发送好几条SQL语句
这样不方便, 写好一个模块,专门完成下订单的功能,当需要下订单的时候,只需要传入参数,调用模块就可以了
(2)执行速度上:传统的sql,涉及到sql语句的网络传输时间,还有一个是dbms对sql语句的一个编译的时间
效率不高 PLsql:sql语句是写在数据库中的只需要编译一次,并且还是省去了sql语句的网络传输时间,效率比较高
(3)安全性的问题:sql语句如果直接写在程序或者客户端中,在网络传输的过程中会产生一些不安全因素
比如sql注入等。PLSQL:sql语句是写在数据库里面的,不需要网络传输,避免了这个问题
(4)传统sql浪费带宽,而plsql节省带宽

PLSQL的缺点

PL/SQL的一致性不好。(oracle的存储过程,放到其他数据库中不能用,需要重新编写)

4.快速入门:

问题:编写一个过程,往emp表中中插入一条记录

create procedure prol is
      begin 
      insert into emp(empno,ename,sal,deptno) values(1011,'lili',3000,20);
      end;    
      如何调用:exec prol;  

总结;

(1)语法
注意过程中,语句后面需要加分号 语句最后 / 结束

create procedure 过程名(参数1 参数类型1,参数2 参数类型2) is 
变量定义
begin
执行部分
 exception
    异常处理部分
  end;

(2)过程调用的方法

     exec  过程名(参数1,参数2...)
     
     问题:创建一个过程:输入一个员工编号,删除emp表中对象的员工记录
     create procedure pro2(no number) is
     begin
       delete from emp where empno=no;
     end;   

–注意:数据类型不能加长度 --===== show error 可以查看错误是什么
–出现编译错误 show error 可以查看错误的详细信息 也可以把错误的编号复制到百度上

–5.PL/SQL可以做什么事情? 创建 过程 函数,包(包体) 触发器==>>基础都是块编程

6.PL/SQL块编程
(1)注释:单行注释:–
多行注释 /* */

(2)标识符的命名规范:

  • 当定义变量的时候,以v_ 比如v_ename
  • 当定义常量的时候 以c_开头
  • 当定义游标的时候,用_cursor结尾
  • 当定义例外(异常)的时候,用e_开头

(3)块结构

  declare(可选)
            声明变量,常量,游标,例外和复杂的数据类型
            begin
              执行部分 :要执行的PL/SQL语句和SQL语句
            exception
              异常处理部分:主要处理各种错误
            end;

案例(只包括执行部分的SQL块)输出一个Hello Worder!

 begin 
         dbms_output.put_line('Hello Word');
       end;  
       set serveroutput on 
   注意(1)dbms_output.put_line(内容);Oracle 中的输出语句
          --  dbms_output是Oracle所提供的包(类似于JAVA的包)该包中包含了一些过程put_line是dbms_output
          --的一个过程
   --包含定义部分和执行部分的PL/SQL块

案例:根据用户的输入的雇员编号,输出该雇员的名字

 declare
       V_ename varchar2(10);
       begin
         select ename into v_ename from emp where empno=&no;
         dbms_output.put_line('姓名是'||v_ename);
       end;
   --注意:变量的定义:变量名  变量类型 (长度);
    --select ename into e_ename from emp where empno=&no
    --select....into...from   表示是对变量e_ename赋值
    --empno=&no  符号表示需要从键盘接收一个empno,

案例:将上述PL/SQL块改为一个过程

        create (replace) procedure pro3 (v_empno number) is      --(replace)有就替换,没有就创建
        v_ename emp.ename%type;
        begin
          select ename into v_ename from emp where empno=v_empno;
          dbms_output.put_line('姓名是'||v_ename);
        end;
    --总结:过程中,变量定义是出现在is和begin之间的,没有declare
   --emp.ename%type  表示v_ename 的类型和emp表的ename的数据类型和长度完全相同

案例:包含定义部分,执行部分和例外处理部分的PL/SQL块
问题:如果在上述案例输入了不存在的员工编号,这个时候会报错,怎么处理?

 declare
        v_ename emp.ename%type;
        begin
          select ename into v_ename from emp where empno=&no;
          dbms_output.put_line('姓名是'||v_ename);
          exception
            when no_data_found then
              dbms_output.put_line('你输入的编号不存在');
        end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值