`
阅读更多
PL/SQL
必须在SQL*Plus中输入SET  SERVEROUTPUT   ON,才能看到输出的数据。
条件逻辑:
IF  condition1   THEN
Statements1
ELSIF  condition2   THEN
Statements2
ELSE
Statements3
END  IF;
循环有三种:
1. 简单循环:
LOOP
Statements
END  LOOP;
要结束简单循环,EXIT语句立即结束循环,EXIT   WHEN  语句在指定条件出现时结束循环。
count  :=0;
LOOP
counter   := counter+1;
exit  when  counter=5;
end    LOOP;

2. WHILE 循环
WHILE   condition   LOOP
Statements
END   LOOP;
例子:
counter   :=0;
WHILE   counter  <6   LOOP
counter  :=counter +1;
end   loop;
3.FOR循环
语法:
FOR   loop_variable    IN    [REVERSE]     lower_bound..  upper_bound  LOOP
statements
END   LOOP;
loop_variable    指定循环变量。可以将已经存在的变量用作循环变量,也可以让循环语句自己创建循环变量(当所指定的变量不存在时会发生这种情况)。
例子:循环变量count2 并没有显示声明,而FOR循环再这种情况下会自动创建一个INTEGER变量。
FOR   count2  IN    1..5  LOOP
DBMS_OUTPUT.PUT_LINE(count2);
END    LOOP;
如果使用了REVERSE,循环变量counter2会从5开始,在每次循环中递减1,最终达到1。

游标
当SELECT语句从数据库中返回的记录多于一条时,就可以使用游标

在SQL*Plus中,可以通过如下的命令运行脚本:
@c:\sql\脚本名称

游标与FOR 循环
利用FOR循环的功能,可以增强在游标中访问记录的能力。当使用FOR 循环时,可以不显示地打开和关闭游标----FOR循环会自动执行这些操作。
  Begin
For  变量名字   in    游标名字
变量名字.列名字
END     LOOP;

创建过程
IN | OUT| IN  OUT 定义了参数的模式。每一个参数都可以选择下列模式之一:
IN 是参数的默认模式。这种模式定义的参数在程序运行的时候已经具有值,在过程体中这个值不会改变。
OUT模式定义的参数只在过程体内部赋值。
IN   OUT  模式定义的参数当过程运行时可能已经具有值,但是在过程体中也可以修改。

调用存储过程:Call   存储过程名称

从user_procedures视图中可以获得有关过程的信息。从all_procedures视图中可以获得可以访问的所有过程的信息。

删除过程
DROP  PROCEDURE   存储过程名称

查看过程中的错误
如果在创建过程或函数时数据库报告出错,可以通过SHOW   ERRORS 命令查看其中的错误。
然后使用EDIT命令可以修改这个错误,然后输入 /重新运行。

函数与过程很相似,唯一区别是函数必须向调用它的运距返回一个值。存储过程和函数有时合起来称为存储子程序(stored subprogram)。
返回值是在RETURN子句中指定的一个PL/SQL类型的值。
创建函数
Create   or   replace    function     circle_area(
v_a   in   number
)  return   number  as
定义变量
BEGIN
函数体
Return   v_area;
End ;
从user_procedures视图中可以获得有关函数的信息。
删除函数:
Drop  function   函数名


包通常由两部分组成:规范和包体
规范里的过程和函数是公有对象
包体里的过程和函数是私有对象
规范中列出的过程和函数可被外部访问,但是只在包体中包含的过程和函数只能被包自身访问。
删除包:DROP   PACKAGE  包名称

触发器可以在SQL语句运行前和之后激活。
行级触发器
语句级触发器
创建触发器
CREATE   [OR   REPLACE]   TRIGGER   trigger_name
{BEFORE   |    AFTER   |   INSTEAD   OF]  trigger_event
ON  table_name
[FOR  EACH   ROW   [WHEN   trigger_condition]]
BEGIN
Trigger_body
END   trigger_name;

创建对象类型,CREATE    [OR  REPLACE]    TYPE语句用于创建对象类型。
注意在对象类型名的末尾添加_typ。这事标准命名。
Create  type   product_typ    as  object(
Id  number,
days_valid    number,
Member  function  get_sell_by_date   return   date
);
由于product_type中包含了方法的声明,所有必须为product_typ创建对象体(body)。
Create  type  body  product_typ  as
Member  function   get_sell_by_date  return  date   is
v_sell_by_date   date;
begin
select    days_valid    +(sysdate)  into    v_sell_by_date      from    dual;
return    v_sell_by_date   ;
end;
end;

set  describe  depth  可以设置describe 显示信息的深度

用对象类型定义列对象和对象表
对象类型可以用来定义表中的列,这种列称为列对象。
下面这个例子创建表products,其中包含一个product_typ列对象。
Create  table products(
Product   product_typ,
Quantity_in_stock    number
);
也可以使用对象类型定义整个表,这种表称为对象表。
Create   table   object_products   of   product_typ;
注意OF子句用于将每个表标识为对象表
对象表中的每个对象都具有唯一的对象标识符(OID)
Create  table   purchases(
Id   number   primary key,
Customer  ref    person_typ  scope    is    object_customers,
Product   ref    product_typ  scope   is   object_products
);
Scope   is  子句将对象引用限制在特定表中的对象上,例如product 列限定在指向object_products表中的对象。
向包含列队象的表中插入一条记录时,必须使用构造函数为该对象提供属性值
insert  into  products (
product  ,
quantity_in_stock) values(
product_typ(1,10),
50
);

查询记录
可以从表中查询单个列对象,要实现这种功能,必须为查询对象的表提供别名。
下面这个例子从products 表中查询单个product列对象。
Select  p.product
From product  p
Where    p.product.id=1;
也可以通过表别名调用get_sell_by_date()
Select  p.product.get_sell_by_date()
From   products  p;
修改products 表中国的记录
Update   products   p
Set  p.product.description=’30  oz  bag  of pasta’
Where   p.product.id=1;
从products表中删除记录
DELECT     FROM  products   p
Where   p.product.id=2;



向purchases表中插入记录
对象表中的每一条记录都有唯一的对象标识符,这个标识符可保存在REF列中。可通过REF()函数访问这个对象标识符,并将返回的对象标识符保存在REF列中。下面这个例子想purchases表中插入一条记录。注意REF()函数用于从object_customers和object_products表中读取记录的对象标识符:
Insert into purchases(
Id,
Customer,
product) values(
1,(select    ref(oc)   from   object_customers  oc  where   oc.id=1),
(select  ref(op)   from    object_products  op   where  op.id=1)
);
在PL/SQL中使用对象
类型继承
对于被继承的类而言,它的定义中必须使用NOT   FINAL子句
Create  type  person_typ   as  object(
Id   number) not  final;
默认状态是FINAL
为了让新类型从已有的类型中继承属性和方法,可以在定义新类型时使用UNDER子句。
Create  type   business_perosn_typ   under    person(
Title    varchar2(20),
Company  varchar2(20));

NOT  INSTANTIABLE
对象类型可以标记为NOT   INSTANTIABLE  ,这样可以防止创建该类型的对象实例。
用户可以定义自己的构造函数,用于初始化对象的属性。可以定义自己的构造函数来实现一个设置,比如编程设置某个对象的一个或者多个属性的默认值。
Create     or   replace  type  person_typ2   as   object(
Id   number,
Constructor  function  person_typ2(
P_id  number)  return  self   as   result
);
构造函数的签名不包含构造函数的实际代码体;代码包含在下面的语句中:
Create     or   replace  type  body    person_typ2   as 
Constructor  function  person_typ2(
P_id  number)  return  self   as   result   is
Begin 
Self.id:=p_id;
Return ;
End;
);

集合有三种类型:
变长数组,只有一个维度,可以存储有序的元素集合,每个元素有一个索引。
嵌套表:它是嵌套在另一个表中的表。
关联数组:它是一个键值对集合。
变长数组:使用变长数组存储一个有序元素集合,每个元素有一个索引,该索引对应元素在数组中的位置。变长数组存在大小限制,但可以动态更改。
创建变长数组类型:
Create   type   varray_address_typ   as    varray(2)    of   varchar2(50);
使用变长数组类型定义表列:
Create    table    customers_with_array(
Id    integer   primary  key,
first_name   va rchar2(10),
last_name   varchar2(10),
addresses   array_address_typ
);
嵌套表是任意数量元素的一个有序集合,所有元素是同一数据类型。
Create  type  address_typ    as    object(
Street    varchar2(10),
City   varchar2(10));
Create  type   nested_table_address_typ      as  table    of     address_typ;

使用嵌套表类型定义表列
Create     table    customers_with_nested_table(
Id  integer   primary    key,
First_name     varchar2(10),
last_name     varchar2(10),
addresses    nested_table_address_typ
)
Nested   table
Addresses
Store    as
Nested_addresses;

操作变长数组:
Create   or  replace   package   varray_package   as
Type   ref_cursor _typ   is  ref   cursor;
Function   get_customers   return  ref_cursor_typ;
Procedure    insert_customer(
P_id    in   customers_with_varray.id%type,
P_first_name    in    customers_with_varray. P_first_name    %type );

Create   or  replace   package  body   varray_package   as
Function   get_customers   return  ref_cursor_typ     is
Begin
Open  customers_ref_cursor   for
Select *   from   customers_with_varray;
Return    customers_ref_cursor;
End   get_customers;
Procedure    insert_customer(
P_id    in   customers_with_varray.id%type,
P_first_name    in    customers_with_varray. P_first_name    %type )   is
Begin
Insert  into  customers_with_varray
Values(p_id,p_first_name);
Commit;
Exception
When  others  then
Rollback;
End  insert_customer;
End   varray_package








分享到:
评论

相关推荐

    八年级数学期中检测卷11-13章.doc

    八年级数学期中检测卷11-13章.doc

    XXXX软件工程第11-13章软件项目管理XXXX-10.pptx

    XXXX软件工程第11-13章软件项目管理XXXX-10.pptx

    九年级物理上学期期中复习考试题(第11-13章)(无答案) 苏科版 试题.doc

    九年级物理上学期期中复习考试题(第11-13章)(无答案) 苏科版 试题.doc

    MyEclipse.6.Java.开发中文教程(11-13章)

    第十三章“开发JPA应用”转向了Java Persistence API(JPA),这是Java标准的ORM规范。JPA允许开发者以面向对象的方式操作数据库,与Hibernate类似,但它是Java EE的一部分。在这一章中,读者将了解JPA的基本概念,...

    C程序设计11-13章习题源代码+exe文件

    这些文件主要涵盖的是C语言程序设计中的链表操作和数据处理方面的问题,是针对C语言学习的第11章和第13章的习题解答。让我们深入探讨一下这些章节通常涉及的知识点以及对应的源代码可能实现的功能。 11章通常涉及到...

    无线传感器网络技术-李晓维 补充章节 (11-13章)

    前些天由于下载限制所以没下完,现在补充完毕^_^

    系统架构设计师+综合知识+第11-13章

    软考高级资格教程分为三部分:综合知识、案例分析、论文。本部分视频教程主要针对综合知识部分进行讲解训练。

    silverlight书籍_SL2完美征程11-13章

    Silverlight 2完美征程是为数不多的Silverlight中文书籍,适合新手入门使用。

    delphi7.0学习资料11-25章

    2. **第13章:时间日期组件** - Delphi提供了一系列组件来处理时间和日期,例如TDateTimePicker和TTimeEdit。这部分内容可能涵盖如何显示、编辑和处理日期与时间值,以及如何进行日期计算和格式化。 3. **第14章:...

    ASP.NET4.0从入门到精通习题例子11-19章

    - 13章可能涵盖数据绑定的概念,如DataSource控件和数据绑定表达式。会介绍各种数据源(如SqlDataSource、ObjectDataSource)的配置和使用,以及如何在控件中展示和操作数据。 4. **用户控件与母版页** - 14章...

    全国计算机二级C语言等级考试视频教程-6-11章

    计算机二级C语言等级考试总16章,43小时,3.3g,视频教程,由于一次只能上传1g,所以分3个资源上传 6-11章 总目录: ...第13章 宏昔换 第14章 结构体 第15章 位运算符及其功能 第16章 六组文件函数的应用

    清华大学精品Python学习PPT课件-第11章 Python项目实战:爬虫程序.pptx

    【课程简介】 清华大学出品的Python课件,非常适合Python新手,也适合老鸟复习回顾,完全可用于自学入门 清华大学精品Python学习PPT课件-第1章...清华大学精品Python学习PPT课件-第13章 Python项目实战:数据分析.pptx

    Jsp基础与案例开发详解随书源码11-12章

    提供了书中从第一章-第十七章中讲解的开发工具和源代码。 目录如下: 第1章:Jsp开发的基本知识以及一些常用软件的安装和配置。 第2章:网页布局与修饰,为前端开发做一些必要的知识储备。 第3章:JDBC应用,这是JSP...

    疯狂Android讲义源码11-19章

    本资源包含了该书11至19章的源码,这些章节涵盖了Android开发中的许多关键知识点,旨在帮助读者深入理解并实践Android应用开发。 1. **Chapter 11: 自定义View** - 自定义View是Android开发中的一项高级技术,让...

    unity3d游戏入门第11-12章

    第11章 运行的方向 第12章 屏幕坐标 第13章 鼠标事件处理 第14章 脚本的运行 第15章 预制体 第16章 (练习) 子弹发射 第17章 物理系统 第18章 碰撞检测 第19章 (练习)飞机大战 第20章 音频播放 第21章 延时...

    VC1-13章教案.zip

    《VC1-13章教案.zip》是一个包含人机交互课程教学材料的压缩包,主要涵盖了从第一到第十三章的教学内容。在这个压缩文件中,我们可以期待找到一系列关于人机交互设计与实践的详细讲解,这对于我们理解并掌握这一领域...

    《操作系统概念》第七版1-13章答案(含代码)

    包含了俗称“恐龙书”的《操作系统概念》1-13章的所有答案,包括了部分编程题目的代码,这是其他答案中所没有的

    php典型模块与项目实战大全-明日科技 11-15章代码+其他内容

    3. **第13章:表单处理与验证** - HTML表单:创建表单元素,设置属性,以及GET和POST方法的使用。 - PHP表单数据处理:获取表单数据,进行验证,防止SQL注入和XSS攻击。 - 错误处理与提示:实现用户友好的错误...

    疯狂android讲义源码11-19章

    源码11-19章涵盖了Android应用开发的多个核心领域,为读者提供了丰富的实践材料。以下是对这些章节涉及知识点的详细解读: 1. **Chapter 11:Android用户界面设计** - Activity和Intent:Activity是Android应用的...

Global site tag (gtag.js) - Google Analytics