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
            
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 集合 1.1 索引表 1.1.1 定义索引表 1.1.2 将条目插入到索引表中 1.1.3 对索引表中进行操作 1.1.4 索引表中的函数 1.2 嵌套表 1.2.1 初始化嵌套表 1.2.2 扩展嵌套表 1.2.3 删除嵌套表中的条目 1.3 变长数组 1.3.1 定义变长数组 1.3.2 扩展变长数组 1.4 批绑定 1.5 集合的异常处理 第二章 触发器 2.1 触发器的创建 2.2 触发器的管理 2.3 触发器的新功能 2.4 替代触发器 2.5 触发器的局限性 第三章 对象 3.1 对象的定义 3.2 对象的存贮和检索 第四章 调试 4.1 编写 DEBUG 程序包(例程) 4.2 调用函数 第五章 大对象类型 5.1 大对象数据类型 5.2 在Oracle8i 数据库中使用外部文件: 5.3 DBMS_LOB 包 5.3.1 函数说明 5.3.2 应用举例 5.3.3 内部 LOB 的函数和过程5.3.4 内部 LOB 的函数和过程的应用举例 5.3.5 临时 LOB 第六章 管理事务和锁定 6.1 事务 6.2 锁定 第七章 动态 SQL 7.1 DBMS_SQL 程序包 7.2 本机动态SQL 7.2.1 执行 DDL 语句 7.2.2 使用绑定变量 7.2.3 执行 PL/SQL 第八章 显示数据 8.1 DBMS_OUTPUT 程序包 8.1.1 开启屏幕显示 8.1.2 关闭屏幕显示 8.1.3 其他函数 8.1.4 引发的异常 8.2 UTL_FILE 程序包 8.2.1 概述 8.2.2 函数描述 8.2.3 例程 8.3 TEXT_IO 程序包 第九章 管理数据作业 9.1 DBMS_JOB 包 9.2 使用后台进程 9.3 执行作业 9.3.1 使用SUBMIT 将作业提交给作业队列 9.3.2 使用RUN 立即执行作业 9.3.3 作业环境 9.4 查看作业 9.4.1 DBA_JOBS 视图的结构 9.4.2 DBA_JOBS_RUNNING 视图的结构 9.5 管理作业 9.5.1 删除作业 9.5.2 修改作业 9.5.3 导入和导出作业 9.5.4 处理损坏的作业 9.5.5 例程 第十章 过程通信 10.1 报警(DBMS_ALERT 程序包) 10.1.1 建立报警的次序 10.1.2 函数应用和说明 10.1.3 应用举例 10.2 DBMS_PIPE 程序包 10.2.1 公有管道和私有管道 10.2.2 使用管道 10.2.3 DBMS_PIPE 包的函数 10.2.4 例程 10.3 DBMS_ALERT 与 DBMS_PIPE 的比较 第十一章 PL/SQL 和 JAVA 11.1 Oracle JAVA 11.2 装载、应用、删除JAVA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值