• Oracle学习笔记4:pl/sql


    1.什么是pl/sql?

      sql:结构化查询语言

      pl/sql:(Procedure Language&Structured Query Language)是对sql语言,存储过程语言的拓展。它可以像Java语言等一样实现简单的逻辑编程。

    2.pl/sql的优点?

      引自博主https://www.cnblogs.com/huyong/archive/2011/05/16/2047329.html 更多详细内容查看原文

      1.有利于客户/服务器环境应用的运行

      2.适合于客户环境

      3.过程化

      4.模块化

      5.运行错误可处理性

      6.提供大量内置程序包

    3.pl/sql的使用

    declare-- declare 可以省略
      --声明部分,在这里声明pl/sql用到的变量,游标,以及局部的存储过程及函数
    begin -- 程序开始部分,不可省略,相当于java中的大括号{
        --执行部分 过程及sql语句,是程序的主要部分
      exception 
        --异常处理部分(可以省略)
    end; --程序结束部分,不可省略相当于结尾大括号}

      pl/sql块可以分为:

      1.匿名块:没有名字的语句块,只能执行一次,可以调用其他程序,不能被其他程序调用

      2.命名块:带有名称的匿名块,这个名称就是标签

      3.子程序:存储在数据库中的存储过程、函数等,当在数据库中建立好后可以在其他程序中调用他们。

      4.程序包:存储在数据库中的一组子程序,定义变量,在包中的子程序可以被其他程序包或子程序调用,但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序

      5.触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序

    4.标识符

      pl/sql中的标识符与sql中的标识符定义基本相同,要求和限制有:

      1.标识符名不能超过30个字符

      2.第一个字符必须为子母

      3.不分大小写

      4.不能为-号

      5.不能为sql保留字

      关于sql命名以及数据类型等https://www.cnblogs.com/huyong/archive/2011/05/10/2041951.html

    匿名块举例:

      举例:根据员工的编号,查询员工的姓名

    declare 
         v_empno number:=7369;--定义变量赋值 (:=)
         v_ename varchar2(20);
    begin
           --解释本句,查询emp表中员工编号为变量v_empno的员工的姓名,将姓名放入变量v_ename中
        select ename into v_ename from emp where empno=v_empno;
           --输出命令,拼接字符串为||
        dbms_output.put_line('员工的名字:'||v_ename);
    end;

    pl/sql中变量赋值:

    v_empno number:=7369

    常量赋值:

     v_empno constant number:=7369 --关键字constant表示为常量

    引用类型变量:

      在pl/sql中,引用类型变量有 :

         列引用类型   %type   

         行引用类型   %rowtype

        记录类型  %record

        表格类型  %table

    举例:

    --列引用类型
    declare
        v_empno emp.empno%type;--列引用类型用法需要表名.列名来声明是那儿一列
        v_ename varchar(20);
    begin
        select empno into v_empno from emp where ename='ALLEN';
        dbms_output.put_line('员工编号:'||v_empno);
    end;
        
      
    --行引用类型  
    declare
        v_row emp%rowtype;--行引用类型表名%rowtype表示为那儿张表
        v_empno number(7):=7369;
    begin
      select * into v_row from emp where empno=v_empno;
      dbms_output.put_line('员工姓名:'||v_row.ename||'员工部门:'||v_row.job);
    end;
    
    --记录类型(复杂的数据类型)
    --举例根据员工号查询员工信息
    declare
    --定义一个记录类型,就像创建一个表 一样
    type emp_record_type is record(
         v_empno emp.empno%type,--逗号结尾
         v_ename emp.ename%type--最后一条不用逗号
    );
    
    v_emp emp_record_type;--声明变量v_emp为记录类型
    begin 
      select empno,ename into v_emp from emp where empno=7369;--要注意查询的数据条数要与记录中的条数对应,这里如果是select * 就会报错
      dbms_output.put_line('结果为:'||v_emp.v_empno);--输出时必须写明输出的数据是哪儿一条,直接输出v_emp报错
    end; 
    
    --table类型,键值的集合,record的集合
    --根据员工号查询员工信息
    declare
    /*定义table类型,
      of数据类型,基本的数据类型,引用类型..
      index by 索引类型*/
      type emp_table_type is table of emp%rowtype index by binary_integer;
      v_emp emp_table_type;
    begin
      --错误 select * into v_emp from emp where empno=7369;
      select * into v_emp(0) from emp where empno=7369; 
       select * into v_emp(1) from emp where empno=7499; 
       dbms_output.put_line(v_emp(0).empno||v_emp(0).ename);
        dbms_output.put_line(v_emp(1).empno||v_emp(1).ename);
    end;

      

      

  • 相关阅读:
    洛谷P4304 [TJOI2013]攻击装置 题解
    洛谷P2172 [国家集训队]部落战争 题解
    CentOS 7.0下配置MariaDB数据库
    读《深入php面向对象、模式与实践》有感(三)
    读《深入php面向对象、模式与实践》有感(二)
    读《深入php面向对象、模式与实践》有感(一)
    Linux下配置Lamp
    自己编写php框架(一)
    php读取html文件(或php文件)的方法
    Thinkphp框架感悟(二)
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11224874.html
Copyright © 2020-2023  润新知