• PLSQL


    SQL - DDL   DQL   DML    TCL   DCL     
                                                                    ---- DBA(数据库管理员)
         完成ARUD  -   增删改查
    星期三,2014年11月19日

    PL/SQL 是过程语言(Procedure Language)与结构化查询语言(SQL)结合而成的编程语言

      PL/SQL 是对 SQL 的扩展
      支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构
      可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑
      与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性、灵活性和安全性
     

    Pl/sql 是一种过程性语言具有:

      变量和类型
      过程和函数
      控制结构
      对象等…
     

    具备pl/sql引擎就可以运行pl/sql所编写的程序,根据运行方式不同,通常将pl/sql所编写的程序分为:

      匿名块
                  可以通过客户端直接在oracle服务器上执行
      存储子过程
                 事先编译好存储在服务器上,需要时调用
                 分为函数和存储过程
      触发器
                 事先编译好,特定事件发生自动调用
     

    具备pl/sql引擎就可以运行pl/sql所编写的程序,根据运行方式不同,通常将pl/sql所编写的程序分为:

    --匿名块
              可以通过客户端直接在oracle服务器上执行
    --存储子过程
             事先编译好存储在服务器上,需要时调用
             分为函数和存储过程
    --触发器
             事先编译好,特定事件发生自动调用
     
     

    PL/SQL基本结构

    一个PL/SQL单元称为一个“块”
    三部分
              1.声明
              2.可执行
              3.异常处理
    1.  declare
    2.       变量等...
    3.    begin
    4.       可包括SQL语句和PL/SQL语句
    5.         SQLPL/SQL区别:
    6.           SQL用来访问或处理数据库表中的数据
    7.           PL/SQL主要处理PL/SQL块中包含的数据及SQL语句
    8.       EXCEPTION标识-抓异常try-catch
    9.         出错时显示消息或执行其他错误
    10.    end; 标识结束
    ps:declare 标识
            在块中使用了任何变量,都必须在这一部分中指出
     

    dbms_output.put_line('hello plsql');

      ------的含义   :使用dbms_output程序包的put_line函数显示输出

    示例:

    1. declare
    2. v_name varchar2(40);
    3. v_sex varchar2(3);
    4. v_salary number (8,1);
    5. begin
    6. select sex into v_sex
    7. from employee
    8. where empno ='0002';
    9. if v_sex ='男'then
    10. select salary
    11. into v_salary
    12. from employee
    13. where empno ='0002';
    14. endif;
    15. dbms_output.put_line(v_salary);
    16. end;
    ps:如果不能显示在控制器中,可能是因为 serveroutput没有打开,请做如下操作:
           1.    show serveroutput           显示当前状态
           2.    set serveroutput on         打开serveroutput
     
     

    具体语法:

    声明部分:
    variablename [CONSTANT常量]         datatype[(要加上长度)]       [not null]      [   :=  |  DEFAULT value_or_expression];
     
       :=                  default                                               select .. Into ..                     Update|insert.. Returning ..into ..
      1. 变量名位于前,变量类型位于后,用“:=”赋值
      2.变量名称:
                 c_  常量
                 g_ 全局变量
                 v_ 变量
      3.前缀只是一种约定
      4.不区分大小写
     
    数据类型:

                    

    ps:
            1.  变量没被初始化则为空值
            2.  非数字数据类型声明的变量,初始化使用的值必须包括在单引号中
            3.  当变量类型是常量时,必须赋初值
            4.  当变量时not null时,也必须赋初值
            5.  赋初值的符号要注意 ,是  :=
     
    作用域:
     
    图片1.png
    可视域:
    图片2.png
     
    简单运算符:
     

    运算符

    运算

    **,NOT

    求幂,逻辑非

    +,-

    正、负

    *,/

    乘、除

    +,-,||

    加、减、连接

    =,!=,<,>,<=,>=,is null,like, between,in

    比较

    And

    or

    图片3.png
    实例:
    1. -- employee
    2. empNO name sex age salary birthDate mobile year-工作时间
    3. 依据员工工作年限+薪
    4. 1+500
    5. 2+1000
    6. 3+10%
    7. 4+15%
    8. >=5+20%
    9. declare
    10. v_empNo employee.empNo%type :='0001';
    11. v_name employee.name%type;
    12. v_salary employee.salary%type;
    13. v_year employee.year%type;
    14. begin
    15. select name, salary, year into v_name, v_salary, v_year
    16. from employee where empNo = v_empNo;
    17. dbms_output.put_line('员工编号: '|| v_empNo ||' 姓名: '|| v_name ||' 原有工资: '|| v_salary ||' 工作年限: '||v_year);
    18. if v_year =1then
    19. v_salary := v_salary +500;
    20. elsif v_year =2then
    21. v_salary := v_salary +1000;
    22. elsif v_year =3then
    23. v_salary := v_salary + v_salary *0.1;
    24. elsif v_year =4then
    25. v_salary := v_salary + v_salary *0.15;
    26. else
    27. v_salary := v_salary + v_salary *0.2;
    28. endif;
    29. update employee set salary = v_salary, year = year +1where empNo = v_empNo
    30. returning name, salary, year into v_name, v_salary, v_year;
    31. dbms_output.put_line('员工编号: '|| v_empNo ||' 姓名: '|| v_name ||' 调薪后工资: '|| v_salary ||' 工作年限: '||v_year);
    32. commit;
    33. end;
     
     





  • 相关阅读:
    Future接口和Callable接口以及FeatureTask详解
    puppet的使用:ERB模板介绍
    puppet的使用:依赖关系整理
    数字证书常见格式整理
    c3p0配置文件
    dockerfile简述
    Grape简介
    keytool和openssl生成的证书转换
    Grape教程-params
    耿丹CS16-2班助教总结
  • 原文地址:https://www.cnblogs.com/jarl/p/5892635.html
Copyright © 2020-2023  润新知