目录

一.PL/SQL编程

基本了解

概念

优点

语法结构

二.PL/SQL运算符

关系运算符

一般运算符

逻辑预算符

三.PL/SQL控制语句

条件控制

IF-THEN语句

IF-THEN-ELSIF语句

循环控制

LOOP死循环

WHILE-LOOP循环

FOR-LOOP循环:

异常

预定义异常

oracle自定义函数

函数

函数的调用

自定义函数

三.数据库对象

1.基本概念:

2.Oracle同义词

公用Oracle同义词

​案例:#创建公有Oracle同义词的语法​

3.Oracle序列

eg:创建序列

eg:使用序列

四.触发器

1.基本概念

2.触发器分类

3.触发器语法

4.触发器功能


一.PL/SQL编程

基本了解

  • 概念

    • 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的扩展语言;

    • 使用PL/SQL 可以编写具有很多高级功能的程序

    • 可以在一定程度上避免了频繁于数据库的请求

  • 优点

    • 使SQL语句更具模块化程序的特点

    • 具有更好的可移植性; 可以移植到另一个Oracle数据库中

    • 减少了程序网络的交互(数据了访问), 提高程序性能

  • 语法结构

    • PL/SQL中可以使用: select insert update delete…(SELECT 语句在PL/SQL中的写法稍微有改变,需要带上伪表)事务语句以及sql函数;增删改别忘了 COMMIT 提交事务

    • 不允许直接使用:create deop alter 但可以通过动态SQL来执行它们

    • PL/SQL语句由三个部分组成:声明部分 执行部分 异常处理部分

declare-- declare 声明部分: variable_name [CONSTANT] type[(size)] [NOT NULL] [:=value];  -- variable_name:变量名称-- [CONSTANT]   :可选表示是否为常量-- type         :表示变量的数据类型-- [(size)]     :可选,数据类型的长度-- [NOT NULL]   :可选,该变量是否可以为空-- [:=value]    :可选,使用 := 给对于对象赋值 初始值;--在此声明PL/SQL用到的变量,常量,类型,游标 以及局部的存储过程和函数;
begin-- begin~end 必须项,执行部分:-- 在此编写执行的过程 及 SQL语句,即程序的主要部分;exception-- exception 可选,指定出现错误时需要执行的操作(异常)
end;-- end: 表示Pl/sql块的结束,别忘了分号结尾;-- 是PL/SQL中的单行注释    /**/ 多行注释;
--变量名规范
-- 变量名首字母必须是英文字母
-- 其后可以是字母、数字或者特殊字符$、#和下划线
-- 变量名长度不超过30个字符
-- 变量名中不能有空格 不能是SQL保留字 不能用 - (减号)
-- 不区分大小写

二.PL/SQL运算符

  • 关系运算符

    • <>, !=, ~=, ^= 不等于

    • 其他与Java类同

  • 一般运算符

    • :=赋值号

    • =>关系号

    • . . 范围运算符

    • ︳︳字符连接符

  • 逻辑预算符

    • iN 在一列值之间

    • 其他与SQL server同

    三.PL/SQL控制语句

  • 控制结构共有三种类型:条件控制 循环控制 顺序控制

    • 条件控制

      • IF-THEN语句

      • - IF 布尔表达式 THENPL/SQL和SQL执行语句END IF;
        - 
      • IF-THEN-ELSIF语句

      • IF 布尔表达式

      • IF 布尔表达式1 THENPL/SQL和SQL执行语句1ELSIF 布尔表达式2 THEN                  --注意:是ELSIF而不是ELSEIFPL/SQL和SQL执行语句2ELSEPL/SQL和SQL执行语句3END IF;    
      • CASE语句

      • 类似于Java的Switch在Oracle 9i 后引入,依据表达式,选择相应的when子句执行

        CASE WHEN 值1 THEN            PL/SQL和SQL执行语句1;WHEN 值2 THEN PL/SQL和SQL执行语句2;.....WHEN 值n THEN PL/SQL和SQL执行语句n;[ELSE else_statements;]             --可选:相当于default 都不符合则执行..END CASE;
    • 循环控制

      • LOOP死循环

      • LOOPPL/SQL和SQL执行语句;
        END LOOP;
        --实现计数器功能,当计数器为10或者大于10时退出
        DECLAREv_count integer := 1;                                   --声明变量
        BEGINLOOP                                                    --死循环开始v_count:=v_count+1;                                 --变每次+1IF v_count>=10 THEN                                 --判断变量 大于等于10 EXIT;                                           --退出循环  END IF;                                             --IF 结束END LOOP;                                               --死循环结束
        END;                                                        --PL/SQL块结束
      • WHILE-LOOP循环

      • WHILE 布尔表达式  LOOPPL/SQL和SQL执行语句;
        END LOOP;
      • FOR-LOOP循环:

      • FOR 变量名 in 最小值..最大值 loop            循环执行的语句;
        END LOOP;
        ​
        -- ..两点表示在其中范围~eg: 1..20  循环从1开始20结束;
        beginfor i in 1..20 loopinsert 表 value(i,值1,值2,值3);COMMIT;                             --提交事务~end loop;   COMMIT;                                 --或放在最后统一提交事务~-- 后面在加一个异常处理,如果出现异常 ROLLBACK; 回滚数据;
        end;
  • 异常

    • 在运行过程中出现的错误叫做异常

    • 发生异常后, 语句将停止执行,PL/SQL引擎立即将控制权转到 PL/SQL的异常处理部分

    注意事项

    • 这里说的是 执行过程中的异常, 并不包含编译的异常…

    • 异常处理exception 用来处理正常执行过程中未预料的事件…

    • 两种比较经典的异常: 预定义异常 和 用户自定义异常

    • 预定义异常

      • 用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE语句 显式引发

      • RAISE_APPLICATION_ERROR 还可以重新定义异常错误消息,为应用程序提供一种与Oracle交互方法 语法: RAISE_APPLICATION_ERROR(err_number,err_message); err_number: 表示为用户异常标识指定的编号, 注意范围必须是 -20999~20000之间负整数’ err_message: 用户为异常指定的文本信息…长度可达 2049字节

    • oracle自定义函数

      • create or replace function 函数名(参数1 模式 参数类型)
        return 返回值类型
        as
        变量1 变量类型;
        变量2 变量类型;
        begin  函数体;
        end 函数名;  

注意事项:

参数的模式有3种:(如果没有注明, 参数默认的类型为 in.)

  • in: 为只读模式, 在函数中, 参数的值只能被引用, 不能被改变;

  • out: 为只写模式, 只能被赋值, 不能被引用;

  • in out: 可读可写.

as/is二选一,在这里没有区别。

可以不定义局部变量。

可以没有异常(exception)处理代码段。

  • eg:创建自定义函数maxvalue,用于比较两个数字的大小,返回较大值:

  • create or replace function maxvalue(val1 number,val2 number) return number
    asval number;   -- 定义局部变量,存放返回值。
    beginif (val1>val2) then    -- 判断传入参数的大小。val:=val1;         -- 赋值是":=",不是"="。elseval:=val2;end if;
    ​return val;  -- 返回
    end;
    /
  • 函数

    • 函数的调用

      • 自定义函数的调用与Oracle数据库自带的函数调用的方法相同。

      • select f_name(123) from dual;
      • 自定义函数

      • eg:定义一个函数,求1+2+3+……+100的和并返回。

      • create  or replace function work4 (a number ,b number ) return number
        as
        sums number :=0;
        beginfor i in a..b loopsums:=sums+i;
        end loop;
        return sums;end;
      • eg:递归求出第21位 1,1,2,3,5,8,13,21...

      • create  or replace function work3 (nums number)
        return number
        as
        results number :=0;
        begin if nums = 1 or nums =2   thenreturn 1;else return  work3(nums-1)+work3(nums-2);end if ;end;select work3(21) from dual 

三.数据库对象

1.基本概念:

数据库中的对象是我们进行数据管理的基本

Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作

2.Oracle同义词

  • 同义词也是虚的一个逻辑对象,不会存储任何数据。本质上算是其他数据对象的一个别名。同时可以将同义词的权限分配给不同的用户,作为安全管理的一种方式。

  • Oracle同义词分类

    公用Oracle同义词

      • 由一个特殊的用户组Public所拥有。

      • 顾名思义,数据库中所有的用户都可以使用公用同义词。

      • 公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。

      私有Oracle同义词

    • 它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。

    • 案例:#创建私有同义词

    • eg:Oracle同义词创建及删除

      
      create [or replace]  sysnonym aa for scott.emp;
      #aa为名字,可自定义,执行如果出现权限不足错误,可以使用管理员给予权限
      #给予权限:使用sys登录后,手动点击user找到scott用户,点击编辑,给系统权限加:create synonym--创建私有同义词
      #查看同义词
      select * from aa;--使用同义词得到emp表数据,后期有需求再用,先理解制作方式。

      ​案例:#创建公有Oracle同义词的语法

      
      create public synonym 同义词名称 for [username.]objectName;#会提示权限不足
      #解决权限问题:使用sys登录后给予权限
      grant create public synonym to scott;
      #撤销权限
      revoke create  public synonym from scott;
      #删除公有同义词
      Drop public synonym 同义词名称

      3.Oracle序列

  • 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存

  • 其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。

  • eg:创建序列

  • create sequence sequence_name //创建序列名称
    [increment by n] //递增的序列值是 n 如果 n 是正数就递增,如果是负数就递减 默认是 1
    [start with n] //开始的值,递增默认是 minvalue 递减是 maxvalue
    [{maxvalue n | NOMAXVALUE}] //最大值  
    [{minvalue n | NOMINVALUE}] //最小值
    [{cycle | nocycle}] //循环/不循环
    [{cache n | nocache}];//分配并存入到内存中

  • eg:使用序列

  • (序列创建后,可以使用序列的NEXTVAL来获取序列的下一个值,使用CURRVAL来查看当前值。第一次使用必须先使用NEXTVAL来产生一个值后才可以使用CURRVAL进行查看。)

    #序列调用 产生一个新的序列
    select seq_test.nextval from dual
    #查看当前序列的值
    select seq_test.currval from dual
    #删除序列
    drop sequence t1_seq;
    ​
  • nextval返回序列中下一个有效的值,任何用户都可以引用

  • currval中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

四.触发器

1.基本概念

  • 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行

    2.触发器分类

    • DML触发器

    • 系统事件触发器: [了解]

    • DDL触发器; [了解]

    • 3.触发器语法

      create [or replace] tigger 触发器名 触发时间 触发事件
      on 表名
      [for each row]
      beginpl/sql语句
      end-- 触发器名- 触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
      -- 触发时间-- 指明触发器何时执行,该值可取:-- before-- 表示在数据库动作之前触发器执行;-- after-- 表示在数据库动作之后触发器执行。
      -- 触发事件-- 指明哪些数据库动作会触发此触发器:-- insert-- 数据库插入会触发此触发器;-- update-- 数据库修改会触发此触发器;-- delete-- 数据库删除会触发此触发器。
      -- 表名-- 数据库触发器所在的表。
      -- for each row-- 对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

4.触发器功能

  • 允许/限制对表的修改

  • 自动生成派生列,比如自增字段

  • 强制数据一致性

  • 提供审计和日志记录

  • 防止无效的事务处理

  • 启用复杂的业务逻辑

eg:创建一个触发器MyTrigger,它的作用是当表scott.dept中的deptno列的值发生变化时, --自动更新表scott.emp中的deptno列的值,从而保证数据的完整性

create or replace trigger MyTrigger
after
update
on scott.dept
for each row begin update scott.emp set deptno = :new.deptno where deptno = :old.deptno;end;select * from scott.emp

eg: 在scott.dept表上创建一个触发器,当删除该表中的记录时,可以同时删除EMP表中记录,保证参照完整性

create or replace trigger trigger65
after
delete on scott.dept
for each row begin delete  scott.emp  where deptno = :old.deptno;end;delete scott.dept where deptno=50;

Oracle的进一步了解相关推荐

  1. oracle 10g 新特性中文笔记

    第三章 装载和卸载数据 目标 完成本课,您将会: *在不同的平台传输表空间 *理解数据泵的总体结构 *监控数据泵作业 *使用数据泵来进行导入和导出 *为数据的population创建外部表 *定义外表 ...

  2. PHP新手上路(十二)

    11. 数据库连接  在上一节里,我们已经介绍了PHP与MySQL数据库的一些基本操作知识,在互联网中有关PHP与MySQL的教程也最多.MySQL是免费的,这一点也许就吸引了不少人.由于其广泛应用, ...

  3. update se_Java SE 7 Update 25 –发行说明进行了解释。

    update se 昨天是CPU日. Oracle通过6月的Java重要补丁更新发布了Java SE更新25 . 在4月的最后一次重大更新之后,这是最后一次与Oracle其他所有Oracle产品都不适 ...

  4. moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–服务器端

    moxy json介绍 在之前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务. 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对 ...

  5. Java SE 7 Update 25 –发行说明进行了解释。

    昨天是CPU日. Oracle通过6月的Java重要补丁更新发布了Java SE更新25 . 在4月的最后一次重大更新之后,这是与所有其他Oracle产品一起不符合Oracle关键补丁更新计划的最后一 ...

  6. MOXy作为您的JAX-RS JSON提供程序–服务器端

    在以前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务. 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对基于JAXB映射的JSO ...

  7. Bridging the Gap between Training and Inference for Neural Machine Translation翻译

    Bridging the Gap between Training and Inference for Neural Machine Translation 翻译 原文链接:https://arxiv ...

  8. 《道俗即诗》- 夕梦叙

    <道俗即诗>- 夕梦叙 版权声明:夕梦叙-达叔原创,转载标明作者即可,请尊重! <道俗即诗>- 夕梦叙 如梦令-李清照 昨夜雨疏风骤,浓睡不消残酒. 试问卷帘人,却道海棠依旧. ...

  9. 开展性能测试必须知道的21件事:认清性能问题

    近年来大家都开始关注移动应用性能管理和性能监测,我们找到一位国外资深的开发者对性能的相关理论,希望各位喜欢. 1. 公理化方法 当我在1989年加入 oracle 公司时,解决性能问题(人们通常说的 ...

最新文章

  1. 虚拟机win2003安装mysql教程_CentOS7.2虚拟机上安装MySQL 5.6.32的教程
  2. 离散数学及其应用上的一个问题
  3. flash as3与后台php交互用户注册例子,as3与PHP后台交互2
  4. tomcat temp 大量 upload 文件_问题:JavaWeb中实现文件上传的方式有哪些?
  5. Linux下testlink安装
  6. ubuntu安装使用latex和texmaker--PC端
  7. android密码输入框6,Android 6位支付密码 密码输入框 极简单的代码实现 看这篇就够了...
  8. 你知道3D打印SLA的优缺点吗?
  9. java英语apple_apple是什么意思_apple在线翻译_英语_读音_用法_例句_海词词典
  10. vue项目出现错误component lists rendered with v-for should have explicit keys
  11. 【定量分析、量化金融与统计学】R语言方差分析的outliers陷阱
  12. 有创意的思维导图要怎样绘制
  13. 1元体验京东云服务器
  14. 水仙花数(所有自幂数)的实现详解-C语言
  15. html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印
  16. Java实现Word转PDF方案选择
  17. Hibernate持久化对象生命周期之实战探索
  18. 【PM】【进度】:把握项目节奏的方法
  19. H3C SNMPv3 配置
  20. 古代名言名句 汉魏南北朝

热门文章

  1. 【python】优矿多因子策略白皮书学习与思考
  2. 金蝶K3物料分字段控制编辑权限
  3. 这 17 个笑话,我真忍不住!!!
  4. f4 stm32 神经网络_意法半导体推出STM32神经网络开发工具箱
  5. pfSense Hangouts 存档下载!
  6. mysql数据库插入表情包emoji表情,出错解决方案
  7. 用while,do while,for循环求出一到一百之间的偶数之和
  8. submit写C语言怎么运行,submit提交方法(一)
  9. 将UBB代码转换成html代码 转
  10. c语言函数调用过程中栈的工作原理理解