oracle pl/sql(一)

一、pl/sql

  pl/sql(procedural language/sql) 是Oracle在标准的sql语言上的扩展,pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句的循环语句,允许使用例外处理各种错误,这样使得它的功能更加强大。 

  优点↓

    提高应用程序的运行性能

    模块化的设计思想【分页的过程,订单的过程,转账的过程...只需要传入几个参数 就可以得到结果】 

    减少网络传输量

    提高安全性

  缺点↓

    移植性差

  开发工具↓

  sqlplus:是Oracle公司提供的工具

  编写一个存储过程,该过程可以向某表中添加记录

oracle pl/sql(一)

oracle pl/sql(一)

oracle pl/sql(一)

  pl/sql developer:是用于开发pl/sql块的集成开发环境(ide),独立的产品,不是Oracle的附带品

  编写一个存储过程,该过程可以删除某表记录

oracle pl/sql(一)

    简单分类

  pl/sql可以编写

    块(编程) 

      过程(存储过程)

      函数

      触发器

      包

二、编写规范

  注释

  单行注释--

  select * from emp where empno = 7788; -- 取得员工信息

  多行注释/*......*/

  标识符号的命名规范

  定义变量,用v_作为前缀 例v_sal

  定义常量,用c_作为前缀 例c_rate

  定义游标,用_cursor作为后缀 例emp_cursor

  定义例外,用e_作为前缀 例e_error

 三、pl/sql块介绍

  :pl/sql 的基本程序单元,编写pl/sql程序实际上就编写pl/sql块,要完成相对简单的应用功能,可能只需要编写一个pl/sql块。要想实现复杂的功能,可能需要在一个pl/sql块中嵌套其它的pl/sql块。

  块结构:定义部分、执行部分、例外处理部分

  如下↓

  declear

  /*定义部分------定义常量、变量、游标、例外、复杂数据类型*/

  begin

  /*执行部分------要执行的pl/sql语句和sql语句*/

  exception

  /*例外处理部分------处理运行的各种错误*/

  end;

  ※注意:定义部分是从declare开始的,此部分是可选的;执行部分是从begin开始的,此部分是必须的;例外处理部分是从exception开始的,此部分是可选的

  块实例 (1):只包括执行部分的pl/sql块

  set serveroutput off -- 关闭输出选项

  set serveroutput on -- 打开输出选项

  begin

    dbms_output.put_line(‘hello,world‘);

  end;

  相关说明:dbms_output是Oracle所提供的包(类似java开发包),该包包含一些过程,put_line是dbms_output包的一个过程。

oracle pl/sql(一)

  块实例 (2):包含定义部分和执行部分的pl/sql

  declare

    v_ename varchar2(5); -- 定义字符串变量

  begin

    select ename into v_ename from emp where empno = &no;

    dbms_output.put_line(‘员工姓名:‘||v_ename);

  end;

  相关说明: & 表示要接收从控制台输入的变量

oracle pl/sql(一)

  块实例 (3):包含定义部分、执行部分、例外处理部分

  为了避免sl/sql程序的运行错误,提高pl/sql的健壮性,应该对可能的错误进行处理

  比如在实例(2)中,如果输入了不存在的应该*,应该做例外处理

  相关说明Oracle事先预定义了一些例外,no_data_found是找不到数据的例外

  -- 显示用户名和工资

  declare

    v_ename varchar2(5); -- 定义字符串变量

    v_sal number(7,2);

  begin

    -- 执行部分

    select ename,sal into v_ename,v_sal from emp where empno = &no;

    -- 在控制台显示用户名和工资

    dbms_output.put_line(‘员工姓名:‘ || v_ename || ‘工资:‘ || v_sal);

  exception

    -- 异常处理

    when no_data_found then

    dbms_output.put_line(‘员工*输入有误‘);

  end;

 oracle pl/sql(一)

四、过程

  过程:用于执行特定的操作,建立过程时,可以指定输入参数(in),输入参数(out)。通过在过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。在sqlplus中用create procedure命令来建立过程。

  过程实例(1):编写一个过程,可以输入员工姓名、新工资 可修改员工的工资

  create procedure sp_pro3(spName varchar2,newSal number) is

  begin

  -- 执行部分 根据员工姓名去修改工资

  update emp set sal = newSal where ename = spName;

  end;

  过程实例(2):调用过程的两种方法

  exec sp_pro3(‘scott‘,4567);

  call sp_pro3(‘scott‘,4567);

oracle pl/sql(一)

  过程实例(3):在java程序中调用一个存储过程

  //演示java程序去调用Oracle的存储过程案例
  package com.sp;
  import java.sql.*;
  public class TestOraclePro {
    public static void main(String[] args){
      try{
        //1.加载驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //2.得到连接
        //服务器IP:127.0.0.1
        //端口号:1521
        //数据库名称:MYORAL
        Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORAL","scott","m123");
        //3.创建CallableStatement
        CallableStatement cs = ct.prepareCall("{call sp_pro3(?,?)}");
        //4.给smith赋值
        cs.setString(1,"smith");
        cs.setInt(2,10);
        //5.执行
        cs.execute();
        //6.关闭
        cs.close();
        ct.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  oracle pl/sql(一)

 

oracle pl/sql(一)

上一篇:mysql扩展库mysqli与OOP面向对象


下一篇:5. SQL Server数据库性能监控 - 当前请求