Oracle12c学习笔记
文章平均质量分 84
《Oracle开发实战经典》读书笔记
-Hermes-
Stay hungry, Stay foolish.
展开
-
Oracle12C--操作类中的其他结构(65)
定义函数 PL/SQL定义的类中,函数的定义有两种方式;MEMBER型函数:该函数需要通过对象进行定义,使用MEMBER定义的函数可以利用SELF关键字访问类中的属性内容;STATIC型函数:该函数独立于类之外,可以直接通过类名称进行调用,使用STATIC定义的函数无法访问类中的属性;说明:SELF与JAVA中的this关键字具有一样的效果;对比STATIC与MEMBER原创 2017-10-22 16:07:16 · 473 阅读 · 0 评论 -
Oracle12C--面向对象编程(64)
知识点的梳理: 用户可以通过user_types(dba_types)及dba_source数据字典查看EMP_OBJECT的相关信息;面向对象有3个主要特征:封装,继承,多态;如果一个类要设置继承则必须指定NOTFINAL,否则此类无法被继承;如果要对查询出来的数据进行排序,可以使用MAP或ORDER定义函数;在一个类中,默认提供的构造方法需要传递全部的属性内容,如果用户有原创 2017-10-22 16:09:10 · 940 阅读 · 0 评论 -
Oracle12C--对象表(66)
简介 说明:Oracle属于面向对象的数据库,所以在Oracle中也允许用户基于类的结构进行数据表的创建,同时采用类的关系进行表中数据的维护示例1:定义要使用的类结构-- 删除emp_object,否则dept_object无法重新建立 DROP TYPE emp_object ;-- 定义部门类 CREATE OR REPLACE TYP原创 2017-10-22 16:09:45 · 1003 阅读 · 0 评论 -
Oracle12C--对象视图(67)
简介 如果需要将一张数据表中的数据转换为对象的形式操作,就可以利用对象视图来完成;利用对象视图,可以将指定视图查询语句的数据按照顺序填充到相应对象的属性中,这样就可以在操作视图时直接将数据以对象的形式返回;示例1:定义类,此类的结构与emp表结构一致 CREATE OR REPLACE TYPE emp_table_object AS OBJECT (atr原创 2017-10-22 16:10:27 · 818 阅读 · 0 评论 -
oracle12C--批量绑定(63)
定于 批量绑定可以将操作结果返回到某一个集合中,也可以使数据库一次性接收多条SQL;举个栗子 示例1:更新时使用BULK COLLECT语句 DECLARETYPE ename_index IS TABLE OF emp.ename%TYPE INDEX BY PLS_INTEGER ;TYPE job_index IS TABLE OF emp.原创 2017-10-09 20:42:14 · 482 阅读 · 0 评论 -
oracle12C--处理游标操作(62)
说明 定义:动态SQL除了处理单行查询操作外,还可以利用游标完成多行数据的操作;在游标定义时也同样可以使用动态绑定变量的方式,此时就需要在打开游标变量时增加USING子句操作;语法:在打开游标变量中使用USING OPEN 游标变量名称 FOR 动态SQL语句 [USING 绑定变量,绑定变量,....]语法2:利用FETCH一次性保存多条数据到集合类型中FETCH原创 2017-10-09 20:42:44 · 861 阅读 · 0 评论 -
oracle12C--EXECUTE IMMEDIATE语句(61)
它是做什么的? 作用:该语句可以方便地在PL/SQL程序中执行DML(insert,upate,delete,单列select),DDL(create,alter,drop),DCL(GRANT,REVOKE)语句;语法:EXECUTE IMMEDIATE 动态SQL字符串 [[BULK COLLECT] INTO 自定义变量,.....| 记录类型][USING [IN | O原创 2017-10-09 20:38:29 · 1310 阅读 · 0 评论 -
Oracle12C--动态SQL(60)
知识点的梳理: 使用动态SQL可以在依赖对象不存在时创建子程序;动态SQL主要利用EXECUTE IMMEDIATE 语句执行DML,DDL,DCL等语句操作;如果使用了绑定变量,则必须在EXECUTE IMMEDIATE中使用USING子句设置所需要的绑定变量;使用RETURNING或RETURN语句可以接收查询或更新后的返回结果;使用批处理可以一次性将数据库中取回的多个数原创 2017-10-09 20:40:47 · 812 阅读 · 0 评论 -
Oracle12C--系统触发器(58)
系统触发器定义 定义:系统触发器用户监视数据库服务的打开,关闭,错误等信息的取得,或者监控用户的行为操作等;语法:CREATE [OR REPLACE] TRIGGER 触发器名称[BEFORE | AFTER] [数据库事件] ON [DATABASE | SCHEMA][WHEN 触发条件][DECLARE] [程序声明部门;]BEGIN 程原创 2017-09-24 22:24:52 · 851 阅读 · 0 评论 -
Oracle12C--管理触发器(59)
3种管理触发器的操作 触发器属于数据中的对象,所有的数据库对象都可以被创建,删除,修改,查询;查询触发器 可以使用3个数据字典查看触发器信息user_triggers; all_triggers; dba_triggers 示例1:使用c##scott用户登录,查看user_triggers数据字典原创 2017-09-24 22:25:17 · 591 阅读 · 0 评论 -
Oracle12--DDL触发器(五十七)
DDL触发器的作用 定义:当创建,修改,删除数据库对象时,也会引发相应的触发器操作事件,此时可以利用触发器对这些数据库对象的DDL操作进行监控;语法:CREATE [OR REPLACE] TRIGGER 触发器名称[BEFORE | AFTER | INSTEAD OF] [DDL事件] ON [DATABASE | SCHEMA][WHEN 触发条件][DECLARE]原创 2017-08-22 21:41:34 · 1094 阅读 · 0 评论 -
Oracle12C--instead-of触发器(五十六)
在视图上定义替代触发器 定义:对视图进行触发器的定义,被称为替代(instead-of)触发器;视图的问题:如果定义了一个由多张数据表一起显示的视图,这个时候用户是无法对此视图执行更新或增加数据的操作的;通过一个示例,说明这个问题:创建一张包含20部门雇员编号、姓名、职位、基本工资、部门编号、部门名称、位置的视图; CREATE OR REPLACE VIE原创 2017-08-15 21:29:31 · 2129 阅读 · 0 评论 -
Oracle12C--复合触发器(五十五)
定义 复合触发器既是表级触发器,又是行级触发器;对于不同级别的触发器,如果要在一张表上完成表级触发器与行级触发器需要编写4个触发器才可以;通过复合触发器,只需要一个触发器就可以定义全部4个功能;复合触发器可以捕获的4个操作事件:触发执行语句之前(BEFORE STATEMENT);触发语句中的每一行发生变化之前(BEFORE EACH ROW);触发语句中的每一行原创 2017-08-15 21:33:44 · 1590 阅读 · 0 评论 -
Oracle12C--DML触发器(五十三)
简介与创建语法 该触发器主要由DML语句触发,当用户执行了更新操作,就会触发;语法:CREATE [OR REPLACE] TRIGGER 触发器名称[BEFORE | AFTER] --触发时间[INSERT | UPDATE |UPDATE OF 列名称 [,列名称,...]|DELETE] ON 表名称[FOR EACH ROW]原创 2017-08-03 20:55:25 · 2796 阅读 · 0 评论 -
Oracle12C--触发器(五十二)
知识点的梳理: Oracle中的触发器分为DML触发器,instead-of(替代)触发器,DDL触发器,系统触发器和数据库事件触发器;DML触发器中分为以下两类:表级触发器:所有更新操作只在之前或之后触发一次;行级触发器:针对更新的每一行分别进行之前或之后触发;行级触发器中可以使用":old"取得更新前的数据,使用":new"取得更新后的数据;复合触发器是在Oracle原创 2017-08-03 20:54:13 · 1235 阅读 · 0 评论 -
Oracle12C--包的纯度级别(五十一)
要对包中的函数进行语法限制,需要设置纯度级别 语法:PRAGMA RESTRICT_REFERENCES(函数名称,WNDS [,WNPS][,RNDS][,RUPS]);纯度级别: 使用范例 示例1:定义包中函数的纯度级别CREATE OR REPLACE PACKAGE purity_pkg AS-- 定义包中的变量 v_nam原创 2017-07-22 08:00:47 · 661 阅读 · 0 评论 -
Oracle12C--重载包中的子程序(五十)
包中的多个子程序可以重载 示例1:编写包规范,同时进行子程序重载CREATE OR REPLACE PACKAGE emp_delete_pkgAS-- 删除雇员时所发生的异常 emp_delete_exception EXCEPTION ;-- 根据雇员编号删除雇员信息 PROCEDURE delete_emp_proc(p_e原创 2017-07-22 08:00:07 · 787 阅读 · 0 评论 -
Oracle12C--包的作用域(四十九)
前言 不在包规范中定义,而只在包体定义的结构为私有;所有的包是在第一次被调用时才会进行初始化操作,而后包的运行状态保存到用户全局区的会话中,在一个会话期间内,此包会一直被用户所占用,一直到会话结束后才会将包释放;包中的任何一个变量或游标都可以在一个会话期间一直存在,相当于全局变量,同时可以被所有的子程序所共享;包中定义全局变量 示例1:在包规范中定义全局变量CR原创 2017-07-15 14:32:40 · 995 阅读 · 0 评论 -
Oracle12C--包的初始化(四十八)
初始化说明 程序第一次调用数据包中的子程序,相关变量或类型引用时,表示对包进行默认的实例化操作,此时会将包的内容从硬盘读入内存,而此包将一直持续到整个会话结束;如果当某个会话第一次使用某个包时,可以由用户定义一些属于自己的初始化操作。如为集合添加数据;包初始化的定义 示例1:定义包规范CREATE OR REPLACE PACKAGE init_pkg AS--原创 2017-07-15 14:32:20 · 1004 阅读 · 0 评论 -
Oracle12C--包(四十七)
目录: 知识点的梳理: 通过包可以实现多种程序结构的统一管理,包分为两个部分,即包规范,包体,只有在包规范中定义的程序结构才可以被其他程序所使用;包中的子程序支持重载,只需要考虑参数以及个数的不同即可;包中程序的纯度有4种级别:WNDS,RNDS,WNPS,RNPS 包的基本概念 包是一种程序模块化设计的实现手段。通过包将一个模块所需要的程序原创 2017-07-10 09:18:03 · 652 阅读 · 0 评论 -
Oracle12c--利用Java调用子程序(四十六)
准备工作 为了方便Java调用,创建一个简单的过程,mldn_procDROP PROCEDURE mldn_proc ;CREATE OR REPLACE PROCEDURE mldn_proc (p1 IN NUMBER , p2 IN OUT NUMBER , p3 OUT NUMBER) ASBEGINp2 := 20 ; -- 设置原创 2017-07-01 09:20:44 · 1613 阅读 · 0 评论 -
Oracle12c--子程序权限(四十五)
不同用户间,进行子程序的访问,需要授权 示例:现在c##scott用户下创建一个bonus_proc的子程序,如果要让其他用户(c##mldnuser)使用此子程序,必须为后者授予EXECUTE的执行权限步骤1:先创建一个c##mldnuser的用户,而后将为其分别赋予数据库操作角色(CONNECT,RESROUCE),同时也会将c##scott用户中的bonus_proc子程序的权原创 2017-07-01 09:20:23 · 671 阅读 · 0 评论 -
Oracle12c--自治事务(四十四)
啥是自治事务 子程序中进行独立的子事务处理,且在此事务处理过程中执行COMMIT或ROLLBACK而不影响整体主事务,那么就需要通过自治事务进行控制流程图: 自治事务是在主事务上单独开启的独立事务,在自治事务处理期间,主事务会暂时挂起,一直等到自治事务执行COMMIT或ROLLBACK后,才会恢复主事务执行;语法与示例 在程序中使用自治事务,可在子程原创 2017-07-01 09:19:58 · 785 阅读 · 0 评论 -
Oracle12C--NOCOPY选项(四十三)
知识点的梳理: IN参数类型无法使用NOCOPY选项 NOCOPY选项的意义 默认,IN模式传递参数采用引用传递方式;而OUT与IN OUT采用数值传递,传递时,会将数据复制一份给形参;而在过程结束之后,被赋予OUT或IN OUT形参上的值会复制回对应的实参;由于OUT,IN OUT的操作会进行复制,当数据较大时,复制的过程会变慢,且消耗大量内存;在定义过程参数时原创 2017-07-01 09:19:31 · 604 阅读 · 0 评论 -
Oracle12C--参数模式(四十一)
3类形式参数: 在定义子程序时,需要接收传递的参数,这种形式参数分为了3类:IN(默认,数值传递):将值传递到子程序中,在子程序所在的修改不会影响原始参数内容;OUT(空进带值出):不带任何数值到子程序中,子程序可以通过此变量将数值返回给调用处;IN OUT(地址传递):可以将值传递到子程序中,同时也会将子程序中对变量的修改返回到调用处;IN模式 此模式为默认的原创 2017-06-17 09:31:07 · 851 阅读 · 0 评论 -
Oracle12C--查询子程序(四十)
利用数据字典查看子程序 user_procedures查询出所有的子程序信息user_objects查询出所有的用户对象(包括表,索引,序列,子程序等)user_source查看用户所有对象的源代码user_errors查看所有的子程序错误信息示例1:通过"user_ procedures"查看所有过程SELECT object_name,authid,object_type FROM原创 2017-06-09 22:50:19 · 709 阅读 · 0 评论 -
Oracle12C--子程序(三十九)
知识点的梳理: 子程序分为:"过程"和"函数"两类,虽然统称子程序,但实际上两者有很大不同;"过程"也可以被称为"存储过程",其与PL/SQL的关系:过程(存储过程)=过程的声明 + PL/SQL块两者区别:函数可以有返回值;过程只能依靠OUT或IN OUT返回数据调用过程的语法为:exec 过程名称子程序就是将定义的PL/SQL程序块在过程或函数中进行统一的管理;原创 2017-06-09 22:49:40 · 931 阅读 · 0 评论 -
Oracle12C--游标变量(三十八)
啥是游标变量? 在定义游标时,不绑定具体的查询,而是动态地打开指定类型的查询;使用游标变量,首先应像集合那样定义一种新的游标变量类型,语法:CURSOR 游标变量类型名称 IS REF CURSOR [RETURN 数据类型];RETURN子句是可选的,不编写此子句,表示此游标可以保存任何的查询结果(属于弱类型游标变量);如果编写了RETURN子句,表示此游标只能是特定类型,匹配原创 2017-06-05 09:26:03 · 2038 阅读 · 0 评论 -
Oracle12C--修改游标数据(三十七)
知识点的梳理: 游标的事务主要依靠"FOR UPDATE"子句与"WHERE CURRENT OF"子句;"WHERE CURRENT OF"子句的原理基于ROWID的概念,在更新或删除游标数据的时候,可以利用此子句定位数据行。而此子句的创建必须存在有FOR UPDATE子句,否则无法使用; FOR UPDATE子句 创建的游标在执行更新或删除的操作时,必须带有FOR原创 2017-06-05 09:25:40 · 2008 阅读 · 0 评论 -
Oracle12C--显式游标(三十六)
知识点的梳理: 显式游标取出数据,使用的是FETCH...INTO 简介 隐式游标是用户操作SQL时自动生成的,而显式游标是指在声明块中直接定义的游标;语法:显示语句必须明确定义出要使用的SQL查询语句,游标操作的也是查询语句返回的结果数据cursor 游标名称([参数列表]) [return 返回值类型]is 子查询[for update [of 数据列原创 2017-05-28 09:27:06 · 1526 阅读 · 0 评论 -
Oracle12C--游标(三十五)
知识点的梳理: 游标可以将指定查询记录中的数据逐行取出,每行数据单独进行处理;静态游标分为两类:隐式游标:在PL/SQL块中编写的每条SQL语句实际上是隐式游标;隐式游标分为:单行隐式游标和多行隐式游标;显示游标:由用户明确定义的游标;显式游标有4个基本属性:%FOUND,%ISOPEN,%NOTFOUND,%ROWCOUNT; 利用FOR语句可以自动打开原创 2017-05-28 09:26:38 · 848 阅读 · 0 评论 -
Oracle12C--批量操作(三十四)
使用FORALL批量绑定PL/SQL的操作会与SQL进行交互,通过PL/SQL执行一条更新语句时,SQL会将更新后的数据返回给PL/SQL,用户才会在PL/SQL中获取新的数据;所以,当更新大批量数据时,会降低性能;示例1:通过PL/SQL程序块执行多条数据表更新DECLARETYPE emp_varray IS VARRAY(8) OF emp.empno%TYPE ;v原创 2017-05-22 16:49:18 · 808 阅读 · 0 评论 -
Oracle12C--可变数组(三十三)
定义简单类型的可变数组 可变数组是一个对象的集合,其中每个对象都具有相同的数据类型;可变数组的大小在创建时决定;在表中建立可变数组后,可变数组在主表即为一个列;可变数组允许用户在表中存储重复的属性;创建可变数组类型语法:create [or replace] type 类型名称 as|is varray(长度) of 数据类型 [not null];/示例1:定义部门原创 2017-05-22 16:47:22 · 1084 阅读 · 0 评论 -
Oracle12C--索引表(三十二)
目录: 知识点的梳理: 索引表不存在遍历操作!由于索引表的索引号是非固定的,用户可以通过"索引表对象.EXISTS()"函数进行验证 EXISTS()函数属于集合函数; 它是啥?索引表类似数组,可以保存多个数据,通过下标访问每一个数据;索引表与数组的区别:索引表的下标,可以用整数或字符串来定义;使用数字作为索引下标,可以设置为负数;原创 2017-05-22 16:40:43 · 642 阅读 · 0 评论 -
Oracle12C--记录类型(三十一)
为什么需要记录类型 示例1:定义过程,输出一个雇员的完整信息 DECLAREv_emp_empno emp.empno%TYPE ; v_emp_ename emp.ename%TYPE ; v_emp_job emp.job%TYPE ; v_emp_hi原创 2017-05-22 16:38:25 · 901 阅读 · 0 评论 -
Oracle12C--集合(三十)
知识点的梳理: 集合数据类型可以像一张数据表一样,向里面保存多行数据;记录类型使用IS RECORD定义,可以由用户自己定义内部的组成;索引表类似于程序语言中的数组,可以直接通过下标进行指定行数据的访问;可变数据可以保存复杂的数据,它可以使用顺序索引进行数据的访问;使用FORALL语句可以将多条要执行的SQL一起绑定执行;通过BULK COLLECT语句可以批量接收数据;原创 2017-05-22 16:36:28 · 500 阅读 · 0 评论 -
Oracle12C--异常处理(二十九)
异常简介 PL/SQL程序分为编译型异常和运行时异常;对于编译型异常,用户没有办法进行处理,只能进行代码的修改;而运行时异常,用户可以使用EXCEPTION语句块来处理;编译型异常示例:程序的语法出现了错误所导致的异常DECLAREv_result NUMBER := 1 ;BEGINIF v_result = 1 -- 此处语法有错误,缺少THEN原创 2017-05-15 09:04:19 · 1341 阅读 · 0 评论 -
Oracle12C--程序结构(二十八)
知识点的梳理: PL/SQL的分支结构分为:IF语句与CASE语句 三种程序结构 顺序结构:分支结构:循环结构:共同点:它们都只有一个入口,也只有一个出口;这些单一入口与出口,让程序易读,好维护,减少调试时间;分支结构 IF语句 示例1:IF语句 DECLAREv_countResult NUMB原创 2017-05-15 09:03:45 · 1238 阅读 · 0 评论 -
Oracle12C--数据类型划分(二十七)
知识点的梳理: Oracle中的varchar2与其他数据库的varchar完全一样;使用UNICODE编码最大的方便之处是统一了字符与汉字的长度。这样在进行文字处理时会更加方便。但是,由于所有的字母都会按照十六进制保存,所以会存在浪费空间的问题 四类数据类型 标量类型(SCALAR,或称基本数据类型):用于保存单个值,例如字符串,数字,日期,布尔;复合类型原创 2017-05-09 09:50:02 · 3470 阅读 · 0 评论 -
Oracle12C--运算符(二十六)
四类运算符 赋值运算符:用来为变量或常量赋值;连接运算符:可以将多个字符串进行连接;关系运算符:判断两个操作数据的大小关系,返回值为TRUE或FALSE,如果有一个数据为NULL,最终结果为NULL;逻辑运算符:与(AND),或(OR),非(NOT)赋值运算符 功能:将一个数值赋予指定数据类型的变量赋值运算符:变量 :=表达式;示例原创 2017-05-09 09:47:21 · 689 阅读 · 0 评论