首页 [教学研究]PLSQL培训教程

[教学研究]PLSQL培训教程

举报
开通vip

[教学研究]PLSQL培训教程[教学研究]PLSQL培训教程 PL/SQL培训教程 文档作者: Kenneth Shao 创建日期: 2010-5-18 确认日期: 2010-5-18 控制编码: 当前版本: 1.0 目录 目录 ..............................................................................................................................................................

[教学研究]PLSQL培训教程
[教学研究]PLSQL培训教程 PL/SQL培训教程 文档作者: Kenneth Shao 创建日期: 2010-5-18 确认日期: 2010-5-18 控制编码: 当前版本: 1.0 目录 目录 ................................................................................................................................................................ 28 UNIT1 SQL、PL/SQL概要 ...................................................................................................................... 1 单元培训目标..................................................................................................................................................... 1 LESSON 1 SQL、SQL*Plus和PL/SQL基本概念 .................................................................................... 1 UNIT2 数据查询.......................................................................................................................................... 3 ..................................................................................................................................................... 3 单元培训目标 LESSON 1简单的数据查询 ............................................................................................................................ 3 基本结构: ....................................................................................................................................................... 3 算术表达式: ................................................................................................................................................... 3 字符串处理 ....................................................................................................................................................... 4 空处理 ............................................................................................................................................................... 4 消除重复行: ................................................................................................................................................... 4 显示表结构: ................................................................................................................................................... 4 LESSON 2 单行函数的使用 ............................................................................................................................ 5 字符函数 ........................................................................................................................................................... 5 数值函数 ........................................................................................................................................................... 6 日期函数 ........................................................................................................................................................... 6 转换函数 ........................................................................................................................................................... 7 单行函数使用的例子: ................................................................................................................................... 8 LESSON 3多表数据查询................................................................................................................................. 8 连接 ................................................................................................................................................................... 8 表别名 ............................................................................................................................................................... 9 非等号连接 ....................................................................................................................................................... 9 外连接 ............................................................................................................................................................... 9 自连接 ............................................................................................................................................................... 9 LESSON 4组函数 ............................................................................................................................................ 10 基本格式 ......................................................................................................................................................... 10 常用组函数 ..................................................................................................................................................... 10 LESSON 5 子查询............................................................................................................................................ 11 格式 ................................................................................................................................................................. 11 UNIT3数据库 .............................................................................................................................................. 13 单元培训目标................................................................................................................................................... 13 LESSON 1系统开发周期和数据关联 ........................................................................................................ 13 系统开发周期 ................................................................................................................................................. 13 数据关联 ......................................................................................................................................................... 14 约束 ................................................................................................................................................................. 14 LESSON ,创建表、序列、视图和索引................................................................................................... 14 创建表格式 ..................................................................................................................................................... 15 创建序列格式 ................................................................................................................................................. 16 创建视图 ......................................................................................................................................................... 17 创建索引 ......................................................................................................................................................... 17 LESSON 3Oracle数据字典 ........................................................................................................................... 18 Oracle数据字典的四大类视图:.................................................................................................................. 18 其他视图: ..................................................................................................................................................... 18 常用视图 ......................................................................................................................................................... 19 LESSON 4用户访问控制: .......................................................................................................................... 19 系统权限: ..................................................................................................................................................... 19 对象权限: ..................................................................................................................................................... 20 权限的回收: ................................................................................................................................................. 21 创建同义词: ................................................................................................................................................. 21 远程数据库的访问: ..................................................................................................................................... 22 UNIT4 PL/SQL ............................................................................................................................................ 23 单元培训目标................................................................................................................................................... 23 LESSON 1简单PL/SQL ................................................................................................................................. 23 PL/SQL结构 ................................................................................................................................................... 23 匿名块,过程和函数 ..................................................................................................................................... 24 包 ..................................................................................................................................................................... 24 程序中的参数和变量类型 ............................................................................................................................. 26 LESSON ,数据获取和游标 ......................................................................................................................... 28 数据获取 ......................................................................................................................................................... 28 游标 ................................................................................................................................................................. 29 LESSON ,PL/SQL控制流 ........................................................................................................................... 30 IF 语句 ............................................................................................................................................................ 30 LOOP 语句...................................................................................................................................................... 31 LESSON ...................................................................................................................................... 32 ,出错处理 Exception 类型................................................................................................................................................ 32 Exception 处理................................................................................................................................................ 32 非预定义的Oracle 数据库例外 .................................................................................................................... 33 用户自定义的例外: ..................................................................................................................................... 34 附录A:........................................................................................................................................................... 35 数据结构: ....................................................................................................................................................... 35 描述: ................................................................................................................................................................ 35 UNIT1 SQL、PL/SQL概要 单元培训目标 , 了解SQL、PL/SQL的基本概念、功能 , 了解Oracle 产品集和关联 , 了解SQL、PL/SQL的基本命令 LESSON 1 SQL、SQL*Plus和PL/SQL基本概念 本节主要讲述SQL、PL/SQL和SQL*Plus的基本概念,以及Oracle产品集之间的关联。 SQL、SQL*Plus和PL/SQL是用来检索和维护存储在Oracle数据库上数据的工具或语言。 , Oracle是一个对象— 关系型数据库管理系统(ORDBMS),它扩展了普通关系 型数据库管理方式,支持面向对象的概念,以表的形式存储信息,维护数据的输 入、数据的存储和数据查询并处理及对数据的三种基本操作:采集、存储、检 索。 , SQL: 结构化查询语言(Structured Query Language),用来与Oracle数据库服务 器进行交互。 例:select name, salary from t_emp select sysdate from dual , PL/SQL: Oracle扩展的SQL语言,具有完整的流程控制定义。 , SQL*Plus: Oracle常用的工具,用来识别SQL语言和编写、执行PL/SQL代码, 它与Oracle数据库管理系统紧密结合。 , SQL*Plus环境登录: (1) windows环境 (2) 命令行环境 如下格式: Sqlplus [username [/password [@database]]] username 数据库用户名 password 数据库的密码,此时是可见的 @database 要登录的数据库名 一旦成功登录,系统提示如下: SQL> , SQL常用命令: 分类 命令 Select 数据检索 数据维护(DML) insert、update、delete 数据定义(DDL) create、drop、alter、rename、truncate 事务处理控制 commit、rollback、savepoint 数据控制(DCL) Grant、revoke , 数据、操作系统、Oracle数据库管理器、SQL和PL/SQL及工具之间的关系 , 在Oracle的产品中有如下的关系:以数据为核心,Oracle Server 结合操作系统进行数据传递和通信,外围有SQL*Plus等工具提供给用户,通过SQL、PL/SQL与Oracle Server交互。 (如下图:) 数据操作系统 Oracle 8SQL、PL/SQL 工具 应用产品 , 代码、缩写和命名 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 :由于SQL与自然语的相似性,同时为提高代码的可读性,对于检索语句、表列命名和程序代码应采用标准规则,表名和列名既要反映数据的实际意义,又要考虑简洁性、完整性。Oracle允许使用最多30个字符命名表和列,为建立完整的、含义明确的、描述性的名称提供了足够的空间。对于程序代码,更要讲究规范性,如变量、函数名等等,要含义明确,提高程序的可读性。 UNIT2 数据查询 单元培训目标 , 理解Oracle数据查询的概念和作用; , 掌握数据查询的基本 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ; , 通过函数、子查询的学习,能写一些较复杂的数据查询。 LESSON 1简单的数据查询 为了检索数据库中的数据,必须使用SQL建立相应的查询语句。本节从最基本的SELECT语句结构出发,讲述如何建立简单的数据查询。 基本结构: SELECT [distinct] {*, column [alias], ……} FROM TABLE SELECT: 选择要查询的数据列 FROM: 数据列所在的表 *: 选择所有的列 COLUMN:选择的列名 ALIAS: 给选定的列一个别名 例:SELECT * FROM s_dept SELECT last_name, first_name, address FROM s_emp 算术表达式: 除了单一的获取数据库数据,也可以在检索的数据列中,可以做各种的算术表达式,以获取所需数据,常用算术运算符有: 加:+ 减:- 乘:* 除:/ 例: SELECT last_name, salary * 12, base_salary + salary FROM tablename 字符串处理 字符串可以做最简单的“加”法,即合并运算:|| 例: SELECT column1||?.?||column2 ||?$? FROM tablename 注:column1、column2必须位字符型数据列 SELECT first_name ||? „|| last_name||?,?|| title “Employees” FROM s_emp 空处理 在Oracle数据库中,常会用到一种空处理,对于数据列中的空值,要做特定处理,就会用到下面空处理函数: NVL: 在数据列的值为空时(并非为零),以真实的值进行替代处理 例: NVL (start_date, sysdate) NVL (name, „no name?) NVL (base_salary, 2000) 注:任何未被声明为NOT NULL或PRIMARY KEY的列都可包含空值,注意, 空值就是空值,并不是值为零或空格,零是一个数值,空格是一个字符,而空值 就是不具有任何类型的值。 例: select first_name, nvl(base_salary, 2000) from s_emp; 消除重复行: 对于数据检索中的重复行,可用如下方法去掉: SELECT DISTINCT column1, column2 … FROM TABLE 例:SELECT item_id from t_onhand SELECT DISTINCT item_id FROM t_onhand 选择多列非重复: 例:SELECT DISTINCT warehoused_id, item_id FROM t_onhand 显示表结构: 对于一个并不熟悉的数据表,要检索其数据,必须知道它的结构和例的数据类型,否则,就无法在SELECT语句中(sql plus中),写出其数据列表达式,通过如下方法,可 以显示该数据表的结构: 格式: DESC[RIBE] tablename Oracle常用数据类型: number(p, s): 浮点类型,最大精度p,小数位s位 varchar2(s): 可变长字符类型,最大长度s位 date: 日期型 char(s): 定长字符类型,长度为s 例: SQL>desc t_item Name Null Type -------- ------ ------- item_id NOT NULL number item_name NOT NULL varchar2(20) base_price number, description varchar2(100) class_id number LESSON 2 单行函数的使用 在Oracle的数据检索中,当简单的运算,例如加、减等不能满足对数据列的处理时,可以通过使用功能更强大的单行函数来达到目标,基本格式如下: Function_name (column|expression, [arg1, arg2, ……]) SQL中共有两种列函数,一是单行函数,另一是多行函数,单行函数主要有四种类型:字符函数、数字函数、日期函数和转换函数。单行函数对数据检索中的每一行作用,每一行返回一个结果。 如下一一介绍各类型函数的使用: 字符函数 如下是用来处理类型为字符类型的数据或数据列: LOWER(col|expr)、UPPER(col|expr)、INITCAP(col|expr) CONCAT(col|expr1, col|expr2)、SUBSTR(col|expr, m[, n]) LENGTH(col|expr) NVL(col|expr1, col|expr2) 其中,LOWER函数是把字符串全部转换为小写;UPPER函数功能与LOWER刚好相反,它是把全部字符串转换为大写;CONCAT是用来连接两个字符串,类似于运算符?||?;SUBSTR是用来截取母字符串中的一个子串,在SQL中较常用到;LENGTH是来册字符串的长度;而NVL具有所有NVL的通用性,即是在列值为空时,用后者取而代之。 例: SQL>SELECT substr(„STRING?, 2,3) from dual SQL>TRI 数值函数 如下是用来处理类型为数值类型的数据或数据列: ROUND TRUNC MOD 注意:round和trunc函数具有不同之处,截取的方法不同,如下有一些示例,说明这两则的不同用法,如下: 例:round(23535.7476, 2) ==> 23535.75 round(23535.7476, 0) ==> 23536 round(23535.7476, -1) ==> 23530 trunc(23535.7476, 2) ==>23535.74 trunc(23535.7476) ==>23535 trunc(23535, -1) ==> 23530 日期函数 如下是用来处理类型为日期类型的数据或数据列的函数: MONTHS_BETWEEN(date1,date2) ADD_MONTHS(date,n) NEXT_DAY(date,‘char’) LAST_DAY(date) ROUND(date[,‘fmt’]) TRUNC(date[,‘fmt’]) 日期函数有其特性: 例: add_months(to_date(„2001-05-01?,?yyyy-mm-dd?), 2) ==>2001-07-01 add_months(to_date(„2001-05-01?,?yyyy-mm-dd?), -2) ==>2001-03-01 注意: 两个日期不可相加,但可做减法,结果为number型,日期型数据加/减数值型数据结果为日期型,日期型数据间不可做乘除法,其他运算借助于日期函数。 SYSDATE: SYSDATE是一个返回系统日期和时间的函数,可以把SYSDATE作为任何表中都具有的普通列。 DUAL: DUAL是用户SYS的一个表,可以被任何用户使用,它只包含一个列DUMMY,且只具有一行值“x”,这是一个非常有用的表,常用来返回一些常量、单值等等。 例如: SQL>SELECT SYSDATE FROM DUAL 转换函数 很多时候,不仅要在同一类型中进行运算,还要把某一类型数据转换为其他类型,以 例运算或显示,如下是用来进行处理数据或数据列的类型的类型转换函数: TO_CHAR(number/date, [„fmt?]) TO_NUMBER(char) TO_DATE(char, [„fmt?]) 转换函数即用来变换数据的类型,如把字符串按格式转换成日期型、数值型,八数值型、日期型转换成字符串等等。 在to_date的函数中,注意[„fmt?]的使用,区别?yyyy? 和?RRRR?,?RR?,?yy?等,如下是to_date格式的详细情况: 格式 描述 SCC or CC 世纪,S则在BC日期前加- YYYY or SYYYY 年,S则在BC日期前加- YYY or YY or Y 年份的后3或2或1位数字 Y,YYY 年份,中间以“,”号隔开 IYYY, IYY, IY, I ISO标准的年份,分别为四位,三位,两位和一位 SYEAR or YEAR 年的拼写,S则在BC日期前加- BC or AD 年份的BC或AD的标示 Q 季度 MM 月份,数值 MONTH 月份的全拼写 MON 月份的拼写,前三位 RM 罗马数字月份 WW or W 一年中的星期或月中的星期 DDD or DD or D 年或月或星期中的天 DAY 天的星期,全拼写 DY 天的星期,前三位拼写 J Julia天,从4713BC开始 例: SELECT TO_CHAR(sysdate,?DAY?) FROM DUAL; SELECT TO_DATE(„2001-07-14?,?YYYY-MM-DD?) FROM DUAL 单行函数使用的例子: 例: 例1:SELECT last_name||?.?||first_name, employee_id, manager_id FROM s_emp WHERE trunc(start_date) = to_date(„2001-05-12?,?yyyy-mm-dd?) And length(last_name)<10 LESSON 3多表数据查询 在数据的检索中,常常要按一定的联系同时从多个表中获取数据,尤其是数据库设计时遵循范式规则,这是就是一种所谓的多表数据查询,本节从建立表的联系开始,讲述多表数据的查询: 多表数据查询的首要条件是如何把多个数据表按一定的规则连接起来,从而获取多个表的、组织好的信息。连接的方式有多种,可按不同的要求进行选择。 连接 即是最简单的等号连接,以分别两个表中某列建立联系: SELECT table.column, table.columnFROM table1, table2 WHERE table1.column1=table2.colmn2; 表别名 在多表数据检索中,由于检索的数据列可能存在于多个表中,且具有同一列名,这时必须在列名前加上表名以示区别,而对于较长的表名,写起来太麻烦,故可用表别名来区分各个不同的表,如下: SELECT T1.column, T2.column…… FROM table1 T1, table2 T2 WHERE T1.column1=T2.colmn2; 非等号连接 即不使用等号来连接两个或两个以上的表 例如: 使用:>=、<、between 外连接 对于两个表,如记录不能一一连接,而又不想漏掉数据,可使用外连接 SELECT T1.column, T2.column…… FROM table1 T1, table2 T2 WHERE T1.column1=T2.colmn2(+); 自连接 对于某些情况,必须要有表自身的连接,这时可利用表别名的作用,即把表完全 看作两个不同的表来处理 对于已连接好的多表数据查询,如同一张“大数据表”,进行类似的数据查询。 例: SELECT T1.fist_name, T2.first_name manager…… FROM t_emp T1, T_emp T2 WHERE T1.employee_id=T2.employee_id(+); 对多于两个以上的表连接具有相同的处理方法,如下是一多表连接例子: 例: SELECT t1.item_name, t2.quantity, t3.last_name FROM t_item t1, T_sales t2, T_emp t3 WHERE t1.item_id=t2.item_id And t2.emp_id=t3.employee_id And t2.approval_flag=?Y? LESSON 4组函数 在数据检索中,我们不仅仅要检索出数据信息,同时还需要一些加工,例如一些统计信息等等,而数据库表中的数据总是离散在许许多多的列中,要组织起来就会用到另一类列函数,即是组函数。 从基本的格式讲起,如何组织数据,分组,以及使用HAVING语句筛选出所需组信息。 基本格式 SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expr] [HAVING group_condition] [ORDER BY column„„] * GROUP BY: 对列进行分组 * HAVING: 条件限制组查询 常用组函数 AVG、COUNT、MAX、MIN STDDEV、SUM、VARIANCE 组值函数如sum、avg、stddev等等,反映的是一组值的某种整体状况、一些统 计信息。同时,要注意的是,组值函数忽略NULL值,在做计算时将其排除在 外,如avg函数,如数据中含有较多的空值时,avg返回的统计信息偏差较大, 而count函数出外,它是一种特殊情况,它可以处理NULL值,并总是返回一个 数值,所求出的值决不会是NULL。 例: SELECT T1.name, T2.item_name, sum(T3.quantity), min(T3.rec_date) FROM t_inventory T1, T_item T2, T_onhand T3 Where T1.warehouse_id=T3.warehouse_id And T3.item_id=T3.item_id GROUP BY T1.name, T2.item_name HAVING sum(T3.quantity)>100 所有的组值函数都有一个distinct或all选项,缺省的选项为all,count函数就是 一个说明起作用的例子: 注意如下查询的结果: SELECT count(distinct item_id), count(item_id), count(*) FROM t_onhand HAVIGN与WHERE: WHERE语句作用在数据检索的每一列上,对每一列进行判定,HAVING语句则 是作用在每一组上,对每一组进行判定,WHERE语句在HAVING起作用前作 用。 考虑以下SQL语句的查询: SELECT t1.last_name, sum(t2.quantity*t2.price) FROM s_emp t1, S_sales t2 WHERE t1.emp_id=t2.emp_id And nvl(t2.cancel_flag,?N?)<>?Y? And nvl(t2.approval_flag,?N?)=?Y? Having sum(t2.quantity*t2.price)>10000; LESSON 5 子查询 子查询是一段嵌入在另一段SQL语句中SELECT语句,通过子查询,可以建立功能强 大的查询语句,尤其在检索某以数据表时,又依奈这张表本身的一些情况。 格式 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 注: I. Expr 与子查询的select_list有相应的结构和数据类型 II. 子查询无order by 语句 III. 子查询必须在operator的右面 下名通过一些例子来说明子查询的应用。 例: SELECT t1.item_id, t1.quantity, t1.rec_date FROM t_onhand t1 WHERE rec_date = ( SELECT min(x.rec_date) FROM t_onhand x WHERE x.item_id = t1.item_id) 当然,很多时候子查询也可由组函数实现,比较一下下面查询的结果与前者的情况: SELECT T1.item_id, T1.quantity, T1.rec_date FROM t_onhand T1, (SELECT item_id, min(rec_date) rec_date FROM t_onhand) T2 WHERE T1.item_id = T2.item_id And T1.rec_date = T2.rec_date 可用于operator的运算符很多,分为单行子查询和多行子查询,单行子查询即是在自 查询的结果中,至多返回一行值,可用于单行子查询的逻辑运算符有: =、>、<、>= 或者<= 多行子查询相对于单行子查询,即在子查询中可返回多行数据结果,可用于多行子查 询的逻辑运算有: in、not in 还有一种存在性相关子查询,即exists语句,它与in子查询相似,但有两点不同: i. 不能匹排一列或多列 ii. 只能用于相关子查询 例: SELECT T1.item_name, T1.description FROM t_item T1 Where exists ( SELECT * from t_sales WHERE item_id = T1.item_id) UNIT3数据库 单元培训目标 , 理解Oracle数据库的概念和作用; , 能创建常用的数据库对象(如表、索引、视图和序列); , 学会使用数据库字典,记住一些常用视图 LESSON 1系统开发周期和数据关联 大型数据库应用系统的开发都是以一定的标准流程开发的,而重要的一条就以系统开发周期为参照,定制开发流程和开发 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 ,逐步实施。 深刻理解数据关联的概念时非常重要的,这对数据库应用系统的设计,具体到数据库对象的设计都是深刻影响的,一个性能优越的数据库应用系统很大程度上依耐于数据库结构的设计,而理解数据关联的实质有利于数据库的设计。 系统开发周期 通过使用系统开发周期策略,实现数据库从概念到产品的转变,系统开发周期包 含多个开发过程和步骤。这种由上到下、系统的方法可把实际的业务需求变成可 操作的数据库概念。 有如下步骤(流程): I. 分析,策略: 根据企业的实际业务和将要扩展的业务需求,分析所要提 供的信息和企业及系统特性,建立相应系统模型; II. 设计:数据库设计,把实体模型映射成数据库表之间的关联,外键关联和 约束; III. 开发和创建文档:开发业务流程,建立用户界面,操作流程,并创建相应 文档(如帮助文档、操作手册等) IV. 产品化:集成各模块功能,统一成一个完整产品,并做好各项测试准备; V. 测试:功能测试、业务流程测试、出错流程测试最后的安装测试等。 在这几步步骤中,第二步尤为重要,直接影响开发的成败和效率,在第二步中, 应用开发者重点要要考虑以下一些因数: 效率:最初的设计是最终设计的一个雏形,要充分考虑业务的效率; 系统集成:系统的多个模块间不是孤立的,应有紧密的结合,这种结合并非看起 来或感觉上的,是从逻辑上和业务流程上的角度来分析的; 与其他系统的集成:企业与运作时,往往有多个系统的存在,但同时各个系统间 是有结合的、联系的,如数据上、业务上的,同时还要考虑未来业务需求的标准 接口等等; 数据关联 系统开发周期第二步的重点工作就是建立逻辑模型,逻辑模型是业务数据的非常规范化的流程图。懂得数据分解的原因和方法是理解模型的基础,而模型又是建立长期支持业务应用程序的基础。 规范化的过程通常用“范式“一词来讨论,最常见就是第一、二、三范式,其中第三范式是最高的规范化层次。 I. 第一范式(1NF):具体做法就是将每一个表中具有相似类型的数据存入不 同的表中,并给每个表确定一个主关键字(即是:Primary Key)----- 唯 一的标号或标示符,消除重复数据; II. 第二范式(2NF):即是表中数据列只依赖主关键字; III. 第三范式(3NF):即是找出不只是依赖于主关键字的所有数据列。 约束 为实现数据结构的规范化标准,即是各级范式,可以在定义表结构时,定一各个列和表的约束,从而严格表中的数据,格式如下: 数据列级约束: Column [ CONSTRAINT constraint_name ] constraint_type Column [ CONSTRAINT constraint_name ] constraint_type 数据表级约束: 约束主要要以下几种: I. Primary Key(PK):由一列或多列构成的唯一标示各行的列; II. Foreign Key(FK):即由表中一列或列组合来映射同一表或别的表的PK或 UK(unique key); III. NOT NULL IV. UNIQUE V. CHECK 对于建立约束的例子,可在建立数据表中参考。 LESSON ,创建表、序列、视图和索引 下面从最基本的数据库对象建立讲起,逐步理解系统开发周期的意义,以及数据关联的意义。 创建表格式 Schema 所有者标识 CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [ column_constraint ], „„ [table_constraint ]); Table 列表名 Column 列名 Datatype 列的数据类型 Column_constraint 列约束 Table_constraint 表约束 例: CREATE TABLE s_dept (id NUMBER(7) CONSTRAINT s_dept_id_pk PRIMARY KEY, Name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL, Region_id NUMBER(7) CONSTRAINT s_dept_region_id_fk REFERENCES S_region (id), CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id)); 很多时候,数据库表的设计都可以通过表的示例图来设计,通过先创建数据表的示例图,再来创写数据表的角本,这是一种非常有效的方式,如下: 例:通过如下数据表的示例图,创建数据表t_emp: Column ID Last_NamUserid Start_date CommissiDept_ID Name e on_pct Key Type PK FK Nulls/UnNN,U NN NN,U ique FK Table FK ID Column Datetype Num Char Char Date Num Num Length 7 25 8 6 7 创建序列格式 CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUEn|NOMAXVALUE}] [{MINVALUEn|NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}] 说明: 标示 说明 Sequence 建立的序列名 INCREMENT BY 序列数字间的间隔,缺省为1 START WITH n 第一个序列值,缺生为1 MAXVALUE n 序列的最大值 NOMAXVALUE 确定序列的最大值,为10的27次方 MINVALUE n 序列的最小值 NOMINVALUE 确定序列的最小值,为1 CYCLE|NOCYCLE 确定序列值达到最大值时,是否重复开始,缺省为 NOCYCEL CACHE n|NO CACHE 确定数据库管理器于值和存储的值的个数,缺省为 NOCACHE 序列常用来给一个表的,,列赋值 序列有NEXTVAL和CURRVAL方法。 例: CREATE SEQUENCE t_item_s Increment by 1 Start wih 1 Maxvalue 999999 Nocache Nocycle; 是运行如下命令,看看结果: select t_item_s.nextval from dual; select t_item_s.currval from dual; 创建视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[,alias]„)] AS subsequery [WITH CHECK OPTION [constraint]] [WITH READ ONLY] 注: I. Subquery可以是非常复杂的select语句 II. Subquery不能包含ORDER BY语句 实际上,视图是一个基于数据表或其他视图的逻辑数据表,一个视图本身并不包含数据,仅仅是一个可以用来查看数据或更新的窗口,一个视图在数据字典中是以一个select语句存储的。 使用视图有着许多优点: i. 限制数据表的访问:由于它是一条select语句,通过选择的取舍,使用 户只能看到或只需看到所要检索的数据列; ii. 允许用户通过一个视图检索多个表的信息,而不要去写复杂的SQL语 句; 创建索引 I. 自动创建 在创建表时,若包含Primary Key或者其他唯一约束时,一个唯一索引就自动创建立了。 II. 手动创建 用户可以创建非唯一的索引来提高检索速度。 CREATE INDEX index ON table (column[, column]„); III. 何时建立索引: 列经常在where或连接中使用; 列包含了一个大范围的值; 列包含了大量的空值; 两个或多个列常常在where或连接中一起被使用; 表的数据量大,而常常检索其中的2-4%; 太多的索引并不总是能提高检索速度。 表空间的概念: Oralce把文件作为其组织系统的一部分,但是它的逻辑结构已超出文件的概念。 一个表空间就是一片磁盘区域,它有一个或多个磁盘文件组成。一个表空间可以 容纳许多表、索引或是试图等等。由于表空间的大小是固定的,所以在向表中间 增加行时,可能装满整个表空间。可以由拥有DBA权限的用户或是自动扩展这个 表空间,其过程是先创建一个磁盘文件,然后将此文件增加到表空间中,或是直 接扩大已存在的数据文件,因此,这些表中的行就会分布于两个文件中。一个或 多个表空间一起就构成了数据库。 每一个数据库均包含一个系统表空间,这里保存业者的记录和地址,它包含数据 字典、数据库的表空间、表、索引的名称和地址。 下面是一个创建表空间的示例: create table space usertemp datafile „HOME.ONE? size 1000k default storage (initial 25k next 10k) minextents 1 maxextent 100 pctincrease 0) permanent; LESSON 3Oracle数据字典 Oracle数据字典是Oracle数据库管理系统的重要组件之一,它包含一系列数据表和数据视图,提供只读属性的数据库信息。 Oracle数据字典实在数据库建立的时候建立的,又Oracle数据库管理器进行更新和维护,提供Oracle数据库用户、各个用户的权限、数据库对象、数据表约束等等信息。 Oracle数据字典的四大类视图: - user 用户拥有的对象 - all 用户可访问对象 - DBA 所有数据对象 - v$ 服务器性能对象 其他视图: - DICTIONARY 显示所有数据字典的数据表、视图和同义词 - TABLE_PRIVILEGES 显示数据对象的所有者、授权者和权限 - IND User_indexes的同义词 常用视图 DICTIONARY、TABLE_PRIVILEGES、IND ALL_TABLES、USER_OBJECTS 数据字典使用示例: 例一:SELECT distinct object_name, object_type FROM usr_objects 例二:SELECT * FROM user_constraints WHERE table_name =?T_ITEM? LESSON 4用户访问控制: 在一个多用户数据库环境,必须维护数据访问和使用的权限,Oracle数据库管理器提供以下安全机制控制: I. 控制数据库的访问; II. 提供数据库对象的局部访问; III. 通过数据字典验证赋予和接收特权; IV. 为数据库对象创建同义词。 数据库安全分为两类,一是系统安全,二是数据安全。系统安全控制数据库 的访问和使用这一层次,例如用户和密码,用户能使用的数据空间,用户允 许使用的操作系统等等;数据库安全控制数据库对象的访问和使用,以及能 在这些数据库对象上能进行的操作。 权限的概念即是执行特定SQL语句的权利。数据库的系统管理员具有最高的 权限,普通用户必须有系统管理员赋予权限来访问数据库和数据库对象,当 然,用户也可具有赋予其他用户或角色的权利。 系统权限: DBA具有最高级系统权限,典型的系统权限有: 系统权限 操作授权 CREATE USER 赋予创建其他Oracle用户权限 DROP USER 删除任何用户 DROP ANY TABLE 删除任何束中的表 BACKUP ANY TABLE 备份任何束中的表 创建用户格式: CREATE USER user IDENTIFIED BY passwordGRANT privilege [, privilege ……] TO user [, user ……] 系统权限授权格式: 角色:即是一组相似的权限,可以用来同一授权给一些用户。这样把相似的权限统一起来,易于给用户授权和维护系统权限,同时,一个用户也可以被授予多个角色权限。 用例如下: CREATE ROLE role; GRANT create table, create view TO manager; GRANT manager TO userA, userB; 对象权限: GRANT { object_priv (, object_priv …) | ALL } [ ( columns ) ] ON object TO { user [, user … ] | role [PUBLIC] [WITH GRANT OPTION] 注意以下几点: 1. DBA可授权给用户,对特定的对象执行某项操作; 2. 对象权限因对相的不同类型而有区别; 3. 对象的所有者拥有对象的所有权限; 4. 对象的所有者可以对对象授予特定的权限。 格式如下: 例: GRANT update ( last_name, first_name, address ) ON t_emp TO manager 在Oracle系统中,可通过如下数据字典查看用户权限情况: 数据字典表 说明 ROLE_SYS_PRIVS 授予角色的系统权限 ROLE_TAB_PRIVS 授予据色的表权限 USER_ROLE_PRIVS 用户可使用的角色 USER_TAB_PRIVS_MADE 用户对象所授予的对象权限 USER_TAB_PRIVS_RECD 用户所授予的对象权限 USER_COL_PRIVS_MADE 用户对象列所授予的对象权限 USER_COL_PRIVS_RECD 用户在特定的列上所授予的权限 权限的回收: 通过使用revoke命令可以收回授予其他用户的权限,同时授予用户的with grant option也会收回。 格式如下: REVOKE {privilege [, privilege …] | ALL }ON object FORM { user [,user …] | role | PUBLIC } [CASCADE CONSTRAINTS] 例: REVOKE select, insert ON S_EMP FORM manager; 创建同义词: 为了引用其他用户的某个表,必须使用这个表的全称,即是用户名加表名,通过使用同义词就可避免这个麻烦,可以引用其他用户的表、视图、序列、过程或是其他别的对象。 格式如下: CREATE [PUBLIC] SYNONYM synonym FOR object; 说明: PUBLIC 所有用户都可访问的同义词 Synonym 创建的同义词名 Object 同义词的引用源 例: CREATE SYNONYM T_EMP FOR scott.t_tmp; 远程数据库的访问: 通过使用数据库链接,用户可以将一组分布的数据库作为一个单一的、集成的数据库来处理。 数据库链接需要SQL*NET运行在远程数据库访问中所涉及到的每一台主机上(“HOSTS”),通常SQL*NET由数据库管理员(DBA)或系统管理员启动。 创建数据库链接语法: Create [public] database link remote_connectConnect to username identified by password Using „connect string? 当建立数据库链接是具体使用的语法取决于下面两个条件: 1. 数据库链接的“公共”或“私有”状态。 2. 使用缺省还是显示方式登录远程数据库。 为了建立数据库链接,必须拥有CREATE DATABASE LINK系统权限,用来连接远程数据库的账号必须拥有CREATE SESSION特权。这两种系统特权都包含在Oracle中的CONNECT角色中。 通过使用数据库链接和同义词来隐藏数据库的物理存放位置,如下: create synonym emp for emp@remote_connect; UNIT4 PL/SQL 单元培训目标 , 掌握PL/SQL常用语法; , 使用Oracle Procedure Builder; , 能创建包、函数和过程解决一些复杂问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ; , 掌握出错流程处理 LESSON 1简单PL/SQL PL/SQL是Oracle扩展的、具有程序设计特色的程序语言,它可以把数据维护和数据检索容入在程序过程当中。 PL/SQL结构 DECLARE -可选项 - 变量,常数,游标,用户定义的例外 BEGIN - Mandatory - SQL 语句 - PL/SQL 控制语句 EXCEPTION – 可选项 - 例外处理 END; Declarative,optional,:包括所有变量、常量、游标和用户定的例外等 Executable [Mandatory]:包括各种SQL代码和PL/SQL代码等 Exception Handling [optional]:对各种例外情况的处理 通常,每一个PL/SQL单元包含一个或多个块结构,这些块之间可以是完全独立的,也可以是一个块在另一个块里面。即是,一个块又能被分为若干个更小的块。 下面是一些典型的PL/SQL程序结构: 程序结构 说明 使用位置 匿名块 没有特定名称的PL/SQL所有PL/SQL环境 块,存在于APPLICATION 中 Oracle database Server 数据库procedure、命名PL/SQL块,能接受参 function 数和重复调用 Application Procedure、命名PL/SQL块,能接受参Developer 2000的组件,function 数和重复调用 例如FORMS Package Oracle database Server 命名PL/SQL模块,包含相 关的Procedure、function 和变量 Database trigger Oracle database Server 与数据库表联系在一起的 PL/SQL块,能自动触发 Application trigger 与Application事件联系在Developer 2000的组件, 一起的PL/SQL块,能自动例如FORMS 触发 匿名块,过程和函数 ,(匿名块 [DECLARE] BEGIN -- 语句 [EXCEPTION] END; II(过程 PROCEDURE name is BEGIN -- 语句 [EXCEPTION] END; III(函数 FUNCTION name RETURN datatype IS BEGIN -- 语句 RETURN VALUE [EXCEPTION] END; 过程与函数的对比: 过程 函数 作为一段PL/SQL代码执行 作为一个表达式调用 没有返回数据类型 必须包含返回数据类型 可以返回一个或多个值 必须且只能返回一个值 包 包是被集中到单独一个单元的一组过程、函数、变量和SQL语句。为了执行一个保中 的过程,必须首先列出名称,接着是过程名称,如下: execute Test_sales_information_pkg.init_item_price(p_warehouse_id,1 ); 包允许多个过程使用相同的变量和数据指针。包中的过程和函数,可为公共访问或为专用。 在创建包时,包的定义和包内容被分别地生成。从而,有两个命令create package和包内容的create package body命令。必须具备create procedure系统权限。 1. 建立包定义的语法: create [or replace] package [user.]package{is |as} PL/SQL package specification; 包的内容由所有列在包定义中的公用对象的PL/SQL代码块及其定义组成。包的内容也可包括未列在包定义中的对象。 2. 包的初始化: 一个包中可以包括代码,在每次用户执行此包时最先被运行。 Create or replace package body test_sales_information_pkg As User_name varchar2(20); Entry_date date; … … begin select user, sysdate into user_name, entry_date from dual; end test_sales_information_pkg; 3. 包的编译和代码察看: 当对象在创建时,Oracle就编译它们,然而,当它们所引用的的数据库对象发生变化时,就有可能变为变为非法的操作。在这些对象下次执行时,它们被数据库重新编译。也可显示的重新编译这类对象,以提高数据库处理的性能,语法如下: alter package [user.]package_name compile [package| body]; 可以通过查询下面的数据字典视图获得当前过程、函数、包和包的内容的源代码: USER_SOURCE 对于用户所有的过程对象 ALL_SOURCE 对于用户所有的或者被授权访问的规程对象 DBA_SOURCE 对于数据库中所有的过程对象 检索的列为TEXT并按照LINE(行号)顺序。 程序中的参数和变量类型 参数: 参数有如下三种类型: IN Argument OUT Argument IN OUT Argument 在参数格式中,IN 可以省略,它也是缺省的形式;IN 代表该参数用于向程序中传递值,OUT代表由程序单元返回给调用它的函数值,而对于 IN OUT 型参数,代表既可向子程序传递值,同时子程序也可返回值给主程序。 变量类型 通用数据类型: 数据类型 说明 BINARY_INTEGER 基本数值整型,-2147483647 ----- 2147483647 NUMBER[(precision,scale)] 基本浮点数值型 CHAR[(maximun_length)] 固定长度的字符型,最大值为32760 LONG 可变常字符型,最大长度为32760 LONG RAW 二进制型,最大长度为32760 VARCHAR2(maximum_length) 可变长字符型,最大长度为32767 DATE 日期和时间类型 BOOLEAN 逻辑型(TRUE、FALSE或NULL) 程序单元(过程、匿名块和函数)中变量的声明: Identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr]; 注意:具有初始值的常量和变量被认为是NOT NULL的,一行最多只有一个常量或是变量的声明 %TYPE类型: 这是一种动态数据类型,在PL/SQL中动态决定器数据类型。它有两大优点: 1( 决定其数据类型的数据库表列的类型未知; 2( 决定其数据类型的数据库表列的类型在运行时是可变的。 为了在PL/SQL中保存某个列的数值,必须确保变量与列具有相同的数 据类型和精度,否则,常会造成PL/SQL错误或是精度的丢失。 而%TYPE类型是由某一个预定的变量或时数据库表中列决定的,这样 就可以确保数据类型的一致。 例: … l_last_name t_emp.last_name%TYPE l_salary t_emp.base_salary%TYPE … 复合数据类型: 1( PL/SQL TABLES : 它有两部分组成:I) BINARY_INTEGER型的Primary Key; II) 数据的列范围。 注意: i. PL/SQL TABLES数据类型并不等同于数据库中的表; i. PL/SQL TABLES数据类型类似一个一维数组; ii. PL/SQL TABLES类型包含两个组件; iii. PL/SQL TABLES类型可动态增长。 声明如下: TYPE type_name IS TABLE OF scalar_datatype [NOT NULL] INDEX BY BINARY_INTEGER; identifier type_name; 例: … TYPE name_table_type IS TABLE OF VARCHAR2(25) INDEX BY BINARY_INTEGER; First_name_table name_table_type; … first_name_table(1):=?FRANCK?; 2( PL/SQL RECORDS: 它包含一个或是一个以上的任何范围、记录、PL/SQL TABLES类型的 组件。 注意: i. PL/SQL RECORD数据类型并不等同于数据库中的表中的一条 记录; iv. PL/SQL RECORD数据类型类似一个多维数组; v. PL/SQL RECORD类型包含多个组件; vi. PL/SQL RECORD类型可动态增长; vii. PL/SQL RECORD类型方便地从一个表中获取一行数据,以便 于PL/SQL的处理。 声明如下: TYPE type_name IS RECORD (field_name1 field_type [NOT NULL { :=|DEFAULT} expr], (field_name2 field_type [NOT NULL { :=|DEFAULT} expr], …); identifier type_name; 例: … TYPE emp_record_type IS RECORD (last_name varchar(25), base_salary number, manager_id number); employee_record emp_record_type; … employee_record.last_name:=?FRANCK?; LESSON ,数据获取和游标 在本节中,主要讲述如何在PL/SQL中访问数据库、获取数据库数据,同时,介绍游标的使用。 数据获取 SELECT select_list INTO variable_name | record_name FROM table WHERE condition; I. INTO 语句是必须的 II. Select 只有一行数据返回 III. Select_list 不能为简写( eg. *) Select_list 检索的数据列,可以包括SQL表达式、单行函数或是组函 数; Variable_name 是一系列变量,用来存储检索的数据值; Record_name PL/SQL RECORD变量,用来存储检索的数据值; Table 数据库表; Condition 一系列约束条件,实现数据的检索。 一个PL/SQL块并非是一个事务处理单元。Commit、savepoints、和rollback是独立的块,但是可以把这些命令写入在一个PL/SQL块中。PL/SQL块不支持数据定义语言(DDL),例如CREATE TABLE,ALTER TABLE,或是DROP TABLE。PL/SQL也不支持数据控制语言(DCL),例如GRANT或是REVOKE。但是,可以通过在PL/SQL块中,使用DBMS_SQL包来实现DDL和DCL功能。 使用范例: FUNCTION sum_emp(v_dep_id IN NUMBER) RETURN NUMBER IS L_sum_salary number; BEGIN SELECT sum(salary) INTO l_sum_salry FROM t_emp WHERE dept_id = v_dept_id; RETURN (L_sum_salary); END; 若有零行或是多于一行数据返回 ,则会触发SELECT的例外: TOO_MANY_ROWS(多于一行数据返回) NO_DATA_FOUND(未检索到一条数据) 在PL/SQL块中,还可以使用其它DML命令: INSERT 插入一行数据到数据库的某个表中去; UPDATE 更新数据库表中的某一行数据; DELETE 从数据库表中删除一行不要数据。 游标 在中使用SQL时,数据库服务器总是在内存区开闭一块空间来存储这段SQL的解析 和执行结果,这个区域就称为游标。游标有显式游标和隐式游标两种,当在程序块中 使用SQL检索时,PL/SQL就自动创建了一个隐式游标,PL/SQL自动管理这个游 标;显式游标是由编程者自行定义和命名。游标建立后,在PL/SQL中有四种属性可 使用: SQL%ROWCOUNT 返回最近的SQL语句检索行数,整型 SQL%FOUND 判断最近的SQL语句执行的结果,若返回一行或多行,则 为TRUE,Boolean型 SQL%NOTFOUND 判断最近的SQL语句执行的结果,若未返回一行,则为 TRUE,Boolean型 SQL%ISOPEN 对于隐式游标,值总是FALSE,因为隐式游标在执行后立 即自动关闭 显式游标声明: CURSOR cursor_name IS Select statement……; 同时,显式游标也可以是带参数的,如下: CURSOR cursor_name(parameter and parameter list) IS Select statement……; 隐式游标例子: RPOCEDURE del_rows(v_warehouse_id number) IS V_rows_del number; BEGIN DELETE FROM t_onhand WHERE warehouse_id = v_warehouse_id; V_rows_del:=SQL%ROWCOUNT; DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_rows_del)||? rows deleted.?); END; LESSON ,PL/SQL控制流 在本节中,主要讲述在PL/SQL块中的流程控制。PL/SQL中有两种流程控制结构,一是IF语句的条件控制结构,二是LOOP语句循环控制结构。 IF 语句 IF condition THEN 语句; [ELSEIF condition THEN 语句;] [ELSE 语句;] END IF; 类似于其他结构化程序语言,它是一种条件控制流。 注意: 1. ELSIF是作为一个单词; 2. END IF是两个单词; 3. 允许多个ELSIF语句; 4. 至多只有一个ELSE语句。 使用范例: … if v_salary<2000 then return v_salary*0.05; elsif v_salary<3000 then return v_salary*0.1; elsif v_salary<5000 then return v_salary*0.15; else return v_salary*0.2 end if; … LOOP 语句 LOOP是一种循环控制结构,以上是它的三种基本结构,对于多重循环,可以加上标 签,进行流程控制,如: (1) LOOP 语句; EXIT [ WHEN condition]; End loop (2) FOR index in [REVERSE] lower_bound..upper_bound LOOP 语句 END LOOP (3) WHILE condition LOOP 语句; END LOOP; FOR循环是一种非常简洁的循环控制流程,如下示例: … BEGIN Dbms_output.put_line(„Name Sales Amount?); FOR cur in ( select t1.first_name, sum(t2.quantity*t2.price) amt From s_emp t1, s_sales t2 Where t1.employee_id = t2.emp_id And nvl(t2.approval_flag,?N?)=?Y? And nvl(t2.cancel,?N?)<>?Y? Group by t1.first_name) LOOP Dbms_output.put_line(cur.first_name||? „||to_char(cur.amt)); End loop; END; 注意:变量cur是不能显示声明的,它是一个隐式声明的游标。 LESSON ,出错处理 在程序的执行中,总是难免会出现一些例外情况,或是要对某些情况做特定的处理,这时候,Oracle的例外处理提供了一个很好的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 。 Exception 类型 根据定义的级别不同,例外有如下三种, I. 数据库预定义 II. 数据库非预定义 III. 用户定义 Exception 处理 例外处理,即对某些特定情况做一些特定处理,这些代码完善了流程的完整性,使得程序具有更多的容错性。 类似于IF条件语句,分别对各种例外做特定处理,提供[WHEN OTHERS THEN]语 句,对其他例外做出通用的处理。 EXCEPTION WHEN exception1 THEN 语句; WHEN exception2 THEN 语句; [WHEN OTHERS THEN 语句;] 注意: 1. WNEN OTHERS是最后的例外处理; 2. 由关键字EXCEPTION开始,在此语句后为例外处理(同一PL/SQL块 中); 3. 允许多个exception例外处理; 4. 在跳离此PL/SQL块至多只有一个例外被处理。 数据库预定的一些例外: NO_DATA_FOUND TOO_MANY_ROWS INVALID_CURSOR ZERO_DIVIDE DUP_VAL_ON_INDEX 使用范例: function item_onhand(p_item_id number) return number is l_qty number; begin select quantity into l_qty from t_onhand where item_id=p_item_id; return l_qty; exception when NO_DATA_FOUND THEN return 0; text_io.put_line(to_char(p_item_id)||?is null?); when TOO_MANY_ROWs THEN return to_number(null,?99?); text_io.put_line(to_char(p_item_id)||? have more than one rec!?); when OTHERS then return to_number(null,?99?); text_io.put_line(„Other error occurred!?); end; 非预定义的Oracle 数据库例外 为了区别对待WHEN OTHERS例外,可以通过声明一些例外来处理Oracle数据库服务的一些错误,它是又PL/SQL自动触发,无需显示触发。 首先,必须在声明部分声明例外处理: exception EXCEPTION; 其次,通过使用PRAGMA EXCEPTION_INI使得所声明的例外同Oracle数据库服务中的错误代码联系起来: PRAGMA EXCEPTION_INI (exception,error_number); 其中:exception 即是前面预定义的例外 error_number Oracle数据库标准的错误代码 最后,在相应的错误例外处理中引用前面声明的例外。 示例: [Declare] e_item_remaining EXCEPTION; PRAGMA_EXCEPTION_INI( e_item_remaining, -2292) … BEGIN … EXCEPTION WHEN e_item_ramaining THEN TEXT_IO.PUT_LINE(„Referential integrity constraint violated.?); … END; 用户自定义的例外: 用户也可以自己定义一些例外处理,以便方便地处理流程,类似于非预定义的Oracle 数据库例外,它必须显示声明,并且它还必须显示的触发。类似于在处理流程时,根据发生的情况,转而调用另一个过程进行处理余下的流程。 手动触发格式如下: RAISE exception; 使用示例:(比较于非预定义的Oracle 数据库例外的异同) [Declare] e_item_remaining EXCEPTION; … BEGIN … RAISE e_item_remaining; … EXCEPTION WHEN e_item_ramaining THEN TEXT_IO.PUT_LINE(„Referential integrity constraint violated.?); … END; 附录A: 数据结构: 数据结构 t_itemt_emp t_classt_onhandt_dept t_inventoryt_sales 描述: t_item: item_id number PK, item_name varchar2(20) NOT NULL, base_price number, description varchar2(100), class_id number FK t_inventory: warehouse_id number PK, name varchar2(30) NOT NULL, description varchar2(100) t_onhand: warehouse_id number FK, item_id number FK, quantity number NOT NULL, rec_date date NOT NULL t_sales: transaction_id number PK, item_id number FK, creation_date date NOT NULL, quantity number NOT NULL, price number, emp_id varchar2(20) FK, approval_flag varchar2(1), shipped_flag varchar2(1), cancel_flag varchar2(1) t_emp: employee_id number PK, last_name varchar2(10) NOT NULL, first_name varchar2(10) NOT NULL, address varchar2(100), start_date date NOT NULL, department_id number, manager_id number, salary number t_dept: department_id number PK, name varchar2(20) NOT NULL, description varchar2(100) t_class: class_id number PK, name varchar2(20) NOT NULL, description varchar2(100)
本文档为【[教学研究]PLSQL培训教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_842972
暂无简介~
格式:doc
大小:121KB
软件:Word
页数:0
分类:初中语文
上传时间:2017-09-18
浏览量:11