当前位置:  数据库>oracle

Oracle数据库中一些基础的语法结构

    来源: 互联网  发布时间:2017-06-21

    本文导语: Oracle数据库中一些基础的语法结构,方括号里的内容为可选项 大括号是必填 1PL/SQL结构块 DECLARE /* * 声明部分——定义常量、变量、复杂数据类型、游标、用户自定义异常 */ BEGIN /* * 执行部分——PL/SQL语句和SQL语句 */ EXCE...

Oracle数据库中一些基础的语法结构,方括号里的内容为可选项

大括号是必填

1PL/SQL结构块

DECLARE
/*
 * 声明部分——定义常量、变量、复杂数据类型、游标、用户自定义异常
 */
BEGIN
/*
 * 执行部分——PL/SQL语句和SQL语句
 */
EXCEPTION
/*
 * 异常处理部分——处理运行异常
 */
END; 
/*块结束标记 */ 

2 创建序列

1 CREATE SEQUENCE  sequence_name
2   3 4 5 6 7 8   ...
9 ; 
  • schema:模式,即用户名称
  • sequence_name:序列名称
  • INCREMENT BY:定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
  • START WITH:定义序列的初始值,默认为1。
  • MAXVALUE:序列生成器能产生的最大值。NOMAXVALUE是默认选项,代表没有最大值定义。
  • MINVALUE:序列生成器能产生的最小值。NOMINVALUE是默认选项,代表没有最小值定义。
  • CYCLE和NOCYCLE:当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值,最小值为1。对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
  • CACHE:定义存放序列的内存块的大小,默认为20,相当于预加载。缓冲部分序列计数以便更快获取序列值,可以改善序列的性能,但缓存选项可能会造成数据丢失。NOCACHE表示不缓冲
  •  3 删除序列

     1 DROP SEQUENCE sequence_name ; 

    4 修改序列

    1 ALTER SEQUENCE  sequence_name
    2   { INCREMENT BY integer
    3   | { MAXVALUE integer | NOMAXVALUE }
    4   | { MINVALUE integer | NOMINVALUE }
    5   | { CYCLE | NOCYCLE }
    6   | { CACHE integer | NOCACHE }
    7   | ...
    8   } ...
    9 ; 

     注意,不能修改序列的初始值,否则会报ORA-02283。如果需要修改初始值,先删除序列再重新创建序列设定初始值。

    复合数据类型

    5.1. 记录(Record)

    1 TYPE record_name IS RECORD(
    2     varable1 data_type1    ,
    3     varable2 data_type2    ,
    4     ......,
    5     varablen data_typen     
    6 );

    5.2. 表(TABLE)

    5.2.1. 索引表

    1 TYPE table_name IS TABLE OF element_type 
    2 INDEX BY ;

    5.2.2 嵌套表

     1 TYPE type_name IS TABLE OF element_type; 

    5.3. 数组(VARRAY) 

     1 TYPE varray_name IS VARRAY(size) OF element_type ; 

    6 显式游标

    6.1声明/定义游标

    1 CURSOR cursor_name
    2   …)]
    3     
    4       IS
    5         select_statement;

    6.2 打开游标

     1 OPEN cursor_name actual_cursor_parameter ]... ) ] 

    6.3读取数据

    1 FETCH { cursor | cursor_variable | :host_cursor_variable }
    2   { into_clause | bulk_collect_into_clause  } ;

    6.4 关闭游标

     1 CLOSE cursor_name; 

    7 游标FOR循环

    1 FOR index_variable IN cursor_name…)] LOOP
    2     -- 游标处理语句
    3 END LOOP;

     8条件结构

     1. 简单IF结构

    1 -- 简单IF结构
    2 IF  THEN
    3     满足条件时执行的语句
    4 END IF;

    2. IF-ELSE结构

    1 -- IF-ELSE结构
    2 IF  THEN
    3     满足条件时执行的语句
    4 ELSE
    5     不满足条件时执行的语句
    6 END IF;

    3 多重IF

     1 -- 多重IF
     2 IF  THEN
     3     满足条件1时执行的语句
     4 ELSIF  THEN
     5     满足条件2时执行的语句
     6 ELSIF  THEN
     7     满足条件3时执行的语句
     8 ELSE
     9     满足条件1、2、3均不满足时执行的语句
    10 END IF;

    注意:ELSIF不能写成ELSEIF

    9 CASE

    语法一

     1 CASE 条件表达式
     2     WHEN 条件表达式结果1 THEN 
     3         语句1
     4     WHEN 条件表达式结果2 THEN
     5         语句2
     6     ......
     7     WHEN 条件表达式结果n THEN
     8         语句n
     9   
    10 END CASE;

    语法二

     1 CASE 
     2   WHEN 条件表达式1 THEN
     3      语句1
     4   WHEN 条件表达式2 THEN
     5      语句2
     6   ......
     7   WHEN 条件表达式n THEN 
     8      语句n
     9   
    10 END CASE;

    10 循环结构 

     简单循环

    1 LOOP
    2     循环体语句;
    3     
    4 END LOOP;

    WHILE 循环

    1 WHILE  LOOP
    2     循环体语句;
    3 END LOOP;

    FOR循环

    1 
    2 FOR 循环计数器 IN  下限 .. 上限 LOOP
    3     循环体语句;
    4 END LOOP ;

     11 异常处理通常放在PL/SQL程序的后部,语法结构为

    1 EXCEPTION
    2     WHEN { exception ... | OTHERS }
    3         THEN statement ...

    11.1非预定义的异常处理

    非预定义异常有错误号没有名字,处理的办法是:自己定义一个名字,绑定到错误号,捕获错误名。处理这类异常,首先必须对非预定义的Oracle异常进行定义。

    如:

    1 myexcp EXCEPTION;

    然后使用EXCEPTION_INIT语句与标准的ORACLE错误联系起来,如:
    2 PRAGMA EXCEPTION_INIT(myexcp,-02292);

    说明:ORA-02292是违反完整性约束的错误代码。
    11.2 定义异常
    1 异常名称 EXCEPTION;
    2 PRAGMA EXCEPTION_INIT(异常的名字,错误号);

    11.3抛出异常
    1 RAISE 异常的名称
    RAISE_APPLICATION_ERROR过程可用于创建用户定义的错误信息,可以在可执行部分和异常处理部分使用
    1 RAISE APPLICATION_ERROR(错误号,错误描述);

    11.4 处理异常
    1 1 EXCEPTION
    2 2     WHEN { exception ... | OTHERS }
    3 3         THEN statement ...

    12. FORALL

    使用FORALL,可以将多个DML批量发送给SQL引擎来执行,最大限度地减少上下文交互所带来的开销。

    1 FORALL index_name IN 
    2     { lower_bound .. upper_bound
    3     | INDICES OF collection_name 
    4     | VALUES OF index_collection
    5     }
    6   dml_statement;

    index_name:一个无需声明的标识符,作为集合下标使用。

    lower_bound .. upper_bound:数字表达式,来指定一组连续有效的索引数字下限和上限。该表达式只需解析一次。

    INDICES OF collection_name:用于指向稀疏数组的实际下标。跳过没有赋值的元素,例如被 DELETE 的元素,NULL 也算值。

    VALUES OF index_collection_name:把该集合中的值当作下标,且该集合值的类型只能是 PLS_INTEGER/BINARY_INTEGER。

    SAVE EXCEPTIONS:可选关键字,表示即使一些DML语句失败,直到FORALL LOOP执行完毕才抛出异常。可以使用SQL%BULK_EXCEPTIONS 查看异常信息。

    dml_statement:静态语句,例如:UPDATE或者DELETE;或者动态(EXECUTE IMMEDIATE)DML语句

     13存储过程

    1 CREATE  PROCEDURE  procedure_name
    2    ... ) ]
    3    
    4    { IS | AS }
    5    {  body | call_spec | EXTERNAL} ;

    procedure_name:过程名称。

    parameter_declaration:参数声明

    格式如下

    1 parameter_name  datatype 
    2           | { OUT | IN OUT }  datatype 

    IN:输入参数。

    OUT:输出参数。

    IN OUT:输入输出参数。

    invoker_rights_clause:这个过程使用谁的权限运行

    as或is用于开始一个PL/SQL块

    declare_section:声明部分。

    body:过程块主体,执行部分。

    一般只有在确认procedure_name过程是新过程或是要更新的过程时,才使用OR REPALCE关键字

     13 创建函数

     1 CREATE  FUNCTION  function_name
     2   ... ) 
     3   ]
     4   RETURN datatype
     5    6  7  8 
     9     }...
    10   ]
    11   { { AGGREGATE | PIPELINED }  USING  implementation_type
    12   |  { IS | AS } {  body 
    13                               | call_spec
    14                               | EXTERNAL
    15                               }
    16   } ; 

    14 建立包规范

    1 CREATE  
    2  PACKAGE  package_name
    3   
    4   { IS | AS } item_list_1 END  ;

    package_name:包名。

    invoker_rights_clause:使用谁的权限运行

    item_list_1:声明包的公用组件列表

     1 { type_definition -- 数据类型
     2 | cursor_declaration -- 游标
     3 | item_declaration -- 变量、常量等
     4 | function_declaration -- 函数
     5 | procedure_declaration -- 过程
     6 }
     7    8  9 10 11 12 13 14   ... 

    15 建立包体

    1 CREATE  PACKAGE BODY  package_name
    2 { IS | AS } 
    3     BEGIN statement ...
    4       ... ]
    5  
    6 END  ;

     动态SQL 使用EXECUTE IMMEDIATE语句

    1 EXECUTE IMMEDIATE dynamic_sql_stmt
    2   
    3   | using_clause 
    4   | dynamic_returning_clause
    5   ] ;

    dynamic_sql_stmt:是代表一条SQL语句或一个PL/SQL块的字符串表达式。

    into_clause:用于存放被选出的字段值的变量或被选出的行记录。格式如:

    INTO { variable [, variable ]... | record )

    using_clause:SQL或PL/SQL字符串中包括用于参数绑定的占位符时,该子句为占位符绑定值,也可用于返回值。输入bind_argument参数是一个表达式,它的值将被输入(IN模式)或输出(OUT模式)或输入输出(IN OUT模式)到动态SQL语句或是PL/SQL块中。一个输出bind_argument参数就是一个能保存动态SQL返回值的变量。格式如:

    USING [ IN | OUT | IN OUT ] bind_argument
      [ [,] [ [ IN | OUT | IN OUT ] bind_argument ]...

    dynamic_returning_clause:指明用于存放返回值的变量或记录。格式如:

    { RETURNING | RETURN } { into_clause | bulk_collect_into_clause }


        
     
     

    您可能感兴趣的文章:

  • oracle数据库在客户端建立dblink语法
  • Oracle 建立临时表语法及使用技巧
  • Oracle存储过程入门学习基本语法
  • SQL查询前10条记录(SqlServer/mysql/oracle)的语法分析
  • Oracle 的for update行锁语法
  • Oracle实现分页查询的SQL语法汇总
  • Oracle和SQL语法区别整理
  • Oracle DECODE函数语法使用介绍
  • ORACLE 常用的SQL语法和数据对象
  • Oracle存储过程基本语法介绍
  • MySQL与Oracle的语法区别详细对比
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle物理结构概述
  • 轻松理解Oracle数据库中的物理结构
  • ORACLE 修改表结构 之ALTER CONSTAINTS的使用
  • 简述Oracle数据仓库的体系结构
  • oracle复制表结构和复制表数据语句分享
  • 手把手教你Oracle数据库导出数据库结构到PowerDesigner
  • oracle 数据库学习 基本结构介绍
  • Oracle体系结构需要首先了解的两个概念
  • Oracle网络应用结构
  • Oracle两个基本概念帮你了解体系结构
  • Oracle专用服务器的内存结构分布原则
  • 在Oracle网络结构解决连接问题
  • Oracle 体系结构笔记整理
  • Oracle 11g Release (11.1) 索引底层的数据结构
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle 数据库(oracle Database)性能调优技术详解
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • ORACLE数据库常用字段数据类型介绍
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  • Oracle发布Oracle SQL Developer 1.2数据库开发工具 帮助用户简化开发工作
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • Oracle收购TimesTen 提高数据库软件性能
  • 卸载oracle数据库
  • Oracle数据库恢复后心得
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • Linux下如何用C语言操作Oracle数据库相关的图书推荐
  • Oracle数据库运行Oracle form时避免出现提示信息
  • Oracle欲收购开源数据库MySQL未果
  • 如何在JBuilder中连接Oracle数据库?
  • Oracle数据库访问参数文件的顺序
  • 循序渐进学习Oracle数据库
  • 安装Oracle加载数据库错误areasQueries的解决
  • Oracle 12c发布简单介绍及官方下载地址
  • 网络技术 iis7站长之家
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3