• PL/SQL编程基础


    1.PL/SQL是一种块结构语言,意味着PL/SQL程序可以分为逻辑块。PL/SQL块由三个部分组成:定义部分、执行部分、异常处理部分。其中,定义部分用于定于常量、变量、游标、用户自定义异常、复杂数据类型等。    执行部分用于实现应用模块功能,该部分包含了要执行的PL/SQL语句和SQL语句。异常处理部分用于处理执行部分可能出现的运行错误。

       PL/SQL块的基础结构:

    DECLARE
    -- 定义部分
    BEGIN
    -- 执行部分
    EXCEPTION
    -- 异常处理部分
    END;-- 块结束标记

    2.PL/SQL特征:

                        (1).有利于客户、服务器环境应用运行

                        (2).适合于客户环境

                        (3).模块化

           (4).过程化

           (5).提供大量内置程序包

           (6).运行错误的可处理性

    3.PL/SQL块的类型:匿名块、子程序、触发器

       匿名块:指没有名称的PL/SQL块。可内嵌到应用程序(例如Java)中,也可以在交互环境(例如SQL*Plus)中直接使用。

       子程序:包括存储过程(用于执行特定操作)、函数(用于返回特定数据)、包(用于逻辑组合相关的过程和函数)。

       触发器:指隐含执行的存储过程。

    4.数据类型与变量

       例如:

    -- 创建表
    create table DEPT -- 部门
    (
      id   NUMBER(4) not null constraint PK_DEPT_ID primary key,
      name VARCHAR2(20)
    );
    
    create table EMPLOYEE -- 员工
    (
      id       NUMBER(4) not null constraint PK_EMP_ID primary key,
      name     VARCHAR2(20) not null,
      birthday DATE,
      address  VARCHAR2(100),
      did      NUMBER(4),
      constraint FK_EMP_DEPT foreign key (DID) references DEPT (ID)
    );
    
    -- 添加测试数据
    INSERT INTO DEPT VALUES(1, '财务部');
    INSERT INTO DEPT VALUES(2, '市场部');
    INSERT INTO DEPT VALUES(3, '综合部');
    INSERT INTO DEPT VALUES(4, '研发部');
    INSERT INTO DEPT VALUES(5, '网络部');
    
    INSERT INTO EMPLOYEE VALUES(1, '李飞', TO_DATE('1975.07.03','yyyy.mm.dd'), '四川成都', 1);
    INSERT INTO EMPLOYEE VALUES(2, '刘兰', TO_DATE('1985.09.03','yyyy.mm.dd'), '四川成都', 1);
    INSERT INTO EMPLOYEE VALUES(3, '张强', TO_DATE('1987.11.22','yyyy.mm.dd'), '广东广州', 2);
    INSERT INTO EMPLOYEE VALUES(4, '刘武龙', TO_DATE('1979.07.18','yyyy.mm.dd'), '陕西西安', 2);
    INSERT INTO EMPLOYEE VALUES(5, '向小梅', TO_DATE('1982.03.03','yyyy.mm.dd'), '四川成都', 2);
    INSERT INTO EMPLOYEE VALUES(6, '周斌', TO_DATE('1985.11.08','yyyy.mm.dd'), '四川成都', 4);
    INSERT INTO EMPLOYEE VALUES(7, '王强', TO_DATE('1985.01.25','yyyy.mm.dd'), '四川成都', 4);
    -- 定义变量
    DECLARE
       cnt NUMBER(4) := 5;
    BEGIN
       DBMS_OUTPUT.PUT_LINE('数字:' || CNT);
    END;
    
    -- %TYPE
    DECLARE
       emp_name employee.name%TYPE; -- emp_name类型与employee表中name列的类型一致
    BEGIN
       SELECT name INTO emp_name FROM employee WHERE id=&emp_id; -- &emp_id 从键盘接收输入
       DBMS_OUTPUT.PUT_LINE('姓名:' || emp_name);
    END;
    
    -- %ROWTYPE
    DECLARE
       rec employee%ROWTYPE;
    BEGIN
       SELECT * INTO rec FROM employee WHERE id=1;
       DBMS_OUTPUT.PUT_LINE('姓名:' || rec.name || ', 生日:' || rec.birthday || ',地址:' || rec.address);
    END;
    
    -- 定义 RECORD
    DECLARE 
      TYPE emp_type IS RECORD(
           ename employee.name%TYPE NOT NULL := '匿名',
           ebirth employee.birthday%TYPE,
           eaddr employee.address%TYPE
      );
      emp emp_type;
    BEGIN
      SELECT name,birthday,address INTO emp FROM employee WHERE id=4;
      DBMS_OUTPUT.PUT_LINE('姓名:' || emp.ename || ', 生日:' || emp.ebirth || ',地址:' || emp.eaddr);
    END;
    
    -- 定义索引表
    DECLARE
       TYPE emp_name_type IS TABLE OF employee.name%TYPE
       -- INDEX BY BINARY_INTEGER;
       INDEX BY VARCHAR2(20);
       
       emp_names emp_name_type;
    BEGIN
       emp_names('lily') := 'Lily';
       emp_names('lucy') := 'Lucy';
       emp_names('tom') := 'Tommy';
       -- SELECT name INTO emp_names('abc') FROM employee WHERE id=1;
       DBMS_OUTPUT.PUT_LINE('姓名:' || emp_names('lily') || ',' || emp_names('lucy') || ',' || emp_names('tom'));
    END;
    
    -- 定义VARRAY
    
    DECLARE
       TYPE array_type IS VARRAY(5) OF VARCHAR2(20);
       
       arr array_type;
    BEGIN
       -- 为各元素赋初值
       arr := array_type('a','b',NULL,'c', 'd');
       DBMS_OUTPUT.PUT_LINE('第一个:' || arr(1));
       DBMS_OUTPUT.PUT_LINE('第三个:' || arr(3));
       arr(3) := '张三';
       DBMS_OUTPUT.PUT_LINE('修改后第三个:' || arr(3));
    END;     
  • 相关阅读:
    SSM框架--详细整合教程
    ssh--整合注意事项
    SSH--三大框架整合原理
    springMVC的流程
    java框架问题整理
    集合的体系
    java异常机制
    java知识点
    Java编程思想【Thinking in java】
    实验三 指令实验(一)
  • 原文地址:https://www.cnblogs.com/moshengren-java/p/4598405.html
Copyright © 2020-2023  润新知