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;
 
 





 

posted @ 2016-09-21 14:56  无丑不成戏如人生  阅读(304)  评论(0编辑  收藏  举报