![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PL/SQL
菖草
每天进步一点一点,时间长了肯定会有巨大的提升,希望能和大家多多交流经验,共同进步。
展开
-
导入和导出(exp/imp命令)
使用导出实用程序导出数据时,可以根据需要按4种方式导出,分别是表方式、用户方式,表空间方式和全部数据库方式。在表方式下还可以按表分区导出数据。1、表方式导出:一个或多个指定的表,包括表的定义、表数据、表的所有者授权、表索引、表约束,以及创建在该表上的触发器。也可以选择只导出结构,不导出数据。表方式还可以导出用户所拥有的全部表,琮可以指定要导出的表的分区。2、用户方式导出:属于一个用户模式的原创 2014-03-19 22:19:42 · 1259 阅读 · 0 评论 -
PL/SQL之DBMS_SQL程序包使用1
DBMS_SQL程序包DBMS_SQL程序包是系统提供给我们的另一种使用动态SQL的方法。使用DBMS_SQL包实现动态的SQL的步骤如下:(1)将要执行的SQL语句或一个语句块放到一个字符串变量中。(2)使用DBMS_SQL包的parse过程来分析该字符串。(3)使用DBMS_SQL包的bind_variable过程来绑定变量。(4)使用DBMS_SQL包的execute原创 2014-03-23 19:32:38 · 1275 阅读 · 0 评论 -
Oracle锁
Oracle锁的分类1、按用户与系统划分(1)自动锁:当进行一项数据操作时,默认情况下,系统自动为此数据库操作获得所有有必要的锁。自动锁又分为DML锁、DDL锁、内部锁和闩(shuan)。(2)显示锁:某些情况下,需要用户显示的锁定数据库操作要用到的数据,使数据库操作执行得更好。显示锁是用户为数据库对象设定的。提示:内部锁和闩:一种资源,如果可能发生多个进程同时访问的情况,造成资源原创 2014-03-23 19:52:41 · 1063 阅读 · 0 评论 -
PL/SQL编程3
--需求:创建存储过程,完成添加新雇员信息,包括编号、名称、薪水、工种和部门编号信息。--(1)如果输入雇员部门编号为空,则会抛出非空的异常。非预定义异常,错误编号:-1400--(2)如果输入雇员部门编号不在部门表中,则会抛出违背外键约束的异常。非预定义异常,错误编号:-2291--(3)如果在雇员表中已经存在输入的雇员编号,则会抛出主键重复的异常。预定义异常DUP_VAL_ON_INDE原创 2014-03-23 20:46:48 · 869 阅读 · 0 评论 -
PL/SQL_包1(开发包)
包(Package)用于逻辑组合相关的PL/SQL类型(例如Table类型和Record类型)、PL/SQL项(例如游标和游标变量)和PL/SQL子程序(例如过程和函数)。通过使用PL/SQL包,不仅简化了应用设计,提高了应用性能,而且还可以实现信息隐藏、子程序重载等功能。建立包1、建立包规范语法如下:CREATE [OR REPLACE] PACKAGE package_name原创 2014-03-24 20:51:42 · 612 阅读 · 0 评论 -
PL/SQL包2(使用包重载)
重载(overload)是指多个具有相同名称的子程序。定义包时,使用重载特性,可以使用户在调用同名组件时使用不同参数传递数据,从而方便用户使用。1、建立包规范CREATE OR REPLACE PACKAGE pkg_overloadIS FUNCTION get_sal(eno NUMBER) RETURN NUMBER; FUNCTION get_sal(NAME VARCH原创 2014-03-24 20:53:55 · 905 阅读 · 0 评论 -
PL/SQL包3(使用包构造过程)
在包中定义了全局变量之后,有些情况下,会话中可能还需要初始化全局变量,此时可以使用包的构造过程,这种过程类似于高级语言中的构造函数和构造方法。1、建立包规范CREATE OR REPLACE PACKAGE emp_packageIS minsal NUMBER(6,2); maxsal NUMBER(6,2); PROCEDURE add_employee(eno NUMB原创 2014-03-24 20:55:35 · 741 阅读 · 0 评论 -
PL/SQL包4(使用纯度级别)
当使用包的公用函数时,它既可以作为表达式的一部分使用,也可以在SQL语句中使用。但如果要在SQL语句中引用包的公用函数,那么该公用函数不能包含DML语句(INSERT、UPDATE和DELETE),也不能读写远程包的变量。为了对的公用函数加以限制,在定义包规范时可以使用纯度级别(purity level)限制公用函数。定义纯度级别的语法如下:PRAGMA RESTRICT_REFERENCES原创 2014-03-24 20:58:02 · 768 阅读 · 0 评论 -
PL/SQL_触发器4(建立INSTEAD OF触发器)
对于简单视图,可以直接执行INSERT,UPDATE和DELETE操作。但是对于复杂视图,不允许直接执行INSERT,UPDATE和DELETE操作。当视图符合以下任何一种情况时,都不允许直接执行DML操作。具体情况如下:1)具有集合操作符(UNION,UNION ALL,INTERSECT,MINUS);2)具有分组函数(MIN,MAX,SUM,AVG,COUNT等);3)具有GRO原创 2014-03-25 21:13:12 · 1065 阅读 · 0 评论 -
PL/SQL_触发器2(行触发器)
行触发器是指执行DML操作时,每作用一行就触发一次的触发器。审计数据变化时,可以使用行触发器。建立行触发器的语法如下:CREATE [OR REPLACE] TRIGGER trigger_nametiming event1 [OR event2 OR event3]ON table_name[REFERENCING OLD AS old | NEW AS new]FOR EACH R原创 2014-03-25 21:05:54 · 712 阅读 · 0 评论 -
PL/SQL_触发器5(建立系统事件触发器)
系统事件触发器是指基于Oracle系统事件(例如LOGON和STARTUP)所建立的触发器。通过使用系统事件触发器,提供了跟踪系统或数据库变化的机制。1、常用事件属性函数1)ora_client_ip_address:用于返回客户端的IP地址2)ora_database_name:用于返回当前数据库名3)ora_des_encrypted_password:用于返回DES加密后的用原创 2014-03-25 21:17:11 · 1651 阅读 · 0 评论 -
PL/SQL触发器3(使用DML触发器)
为了确保数据库数据满足特定的商业规则或企业逻辑,可以使用约束、触发器和子程序实现。因为约束性能最好,实现最简单,所以首先约束;如果使用约束不能实现特定规则,那么应该选择触发器;如果触发器仍然不能实现特定规则,那么应该选择子程序(过程和函数)。DML触发器可以用于实现数据安全保护、数据审计、数据完整性、参照完整性、数据复制等功能。1、控制数据安全在服务器级别控制数据安全是通过授予和收回对象权原创 2014-03-25 21:10:39 · 939 阅读 · 0 评论 -
PLSQL之DBMS_SQL程序包使用2
测试表CREATE TABLE demo( a NUMBER, b NUMBER, c NUMBER);测试数据BEGIN FOR i IN 1..10 LOOP INSERT INTO demo(a,b,c) VALUES( ROUND(dbms_random.value,2)*100, ROUND(dbms_ra原创 2014-03-23 14:37:02 · 1830 阅读 · 0 评论 -
PL/SQL_处理例外2(非预定义异常、自定义异常)
处理非预定义例外为了提高PL/SQL程序的健壮性,应该在PL/SQL应用程序中合理地处理这些Oracle错误,此时就需要使用非预定义例外。使用非预定义例外的步骤如下图所示:示例如下:DECLARE e_integrity EXCEPTION; PRAGMA EXCEPTION_INIT(e_integrity,-2291);BEGIN UPDATE emp SET dep原创 2014-03-22 11:45:17 · 1458 阅读 · 0 评论 -
PL/SQL处理例外3(PL/SQL编译警告)
1、PL/SQL警告分类SEVERE:该种警告用于检查可能出现的不可预料结果或错误结果,例如参数的另外问题。PERFORMANCE:该类警告用于检查可能引起的性能问题,例如在执行INSERT操作时为NUMBER列提供了VARCHAR2类型的数据。INFORMATIONAL:该类警告用于检查子程序中的死代码。ALL:该关键字用于检查所有警告(SEVERE,PERFORMANCE,IN原创 2014-03-22 11:54:19 · 1350 阅读 · 0 评论 -
导入和导出(数据泵技术)
1、基于命令行的数据泵导出步骤注意:1、expdp和impdp命令最后不要写";"。由于经常写SQL语句形成习惯,这里请注意。2、expdp和impdp命令参数较多,可以在DOS下输入C:\expdp help=y来查询参数的相关说明。--创建目录,同时硬盘上创建该目录create directory dump_dir as 'E:\baackup';--SELECT * FR原创 2014-03-19 22:16:13 · 1688 阅读 · 0 评论 -
Oracle PL/SQL异常处理(非预定义错误)
非预定义错误非预定义错误即其他标准的Oracle错误。对于这种异常情况的处理,需要用户在程序中定义,然后由Oracle自动将其引发。对于这类异常情况的处理,首先必须对非定义的Oracle错误进行定义,步骤如下。1)在PL/SQL块的定义部分定义异常情况: EXCEPTION;2)将其定义好的异常情况,与标准的Oracle错误联系起来,使用EXCEPTION_IN原创 2014-03-19 13:41:53 · 1866 阅读 · 0 评论 -
PL/SQL编程2
需求:根据订单进行发货第一步:检索商品表,根据订单中的商品id检索该商品的库存第二步:判断库存量是否大于订单需求第三步:更新商品库存第四步:更新订单状态分号的注意事项:DECLARE,BEGIN和EXCEPTION后没有分号。而END以及所有SQL语句,和PL/SQL语句必须以分号结束变量的定义语法:DECLAREvariable_name type [NOT原创 2014-03-18 21:36:36 · 1170 阅读 · 0 评论 -
PL/SQL基础
PL/SQL块分类1、无名块或匿名块(Anonymous):动态构造,只能执行一次,可调用其他程序,但不能被其他程序调用。2、命名块(Named):带有名称的匿名块,这个名称就是标签。3、子程序(SubProgram):存储在数据库中的存储过程、函数等。当在数据库上建立好后可以在其他程序中调用。4、触发器(Trigger):当数据库发生操作时,会触发一些事件,从而自动执行相应的原创 2014-02-28 20:19:16 · 812 阅读 · 0 评论 -
PL/SQL_使用复合数据类型1(PL/SQL记录)
定义PL/SQL记录1、自定义PL/SQL记录当使用自定义的PL/SQL记录时,需要分别定义PL/SQL记录类型和记录变量。定义记录类型和记录变量的语法如下:TYPE type_name IS RECORD( field_declaration[, field_declaration]...);identifier type_name;示例如下:DECLARE TY原创 2014-03-21 18:56:01 · 1185 阅读 · 0 评论 -
PL/SQL_使用复合数据类型2(PL/SQL集合)
使用PL/SQL集合PL/SQL集合类型是类似于高级语言数组的一种复合数据类型,集合类型包括索引表(PL/SQL表)、嵌套表(Netsted Table)和变长数组(VARRAY)等三种类型。索引表的下标不仅可以为负值,而且其元素个数没有限制。注意,索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用。定义索引表的语法如下:TYPE type_name IS TAB原创 2014-03-21 19:04:11 · 1163 阅读 · 0 评论 -
PL/SQL_使用复合数据类型3(多级集合)
多级集合多级集合是指嵌套了集合类型的集合类型。从Oracle9i开始,允许集合类型嵌套另一种集合类型,从而在PL/SQL中实现了多维数组。DECLARE --定义一维VARRAY TYPE a1_varray_type IS VARRAY(10) OF INT; --定义二维VARRAY集合 TYPE na1_varray_type IS VARRAY(10) OF a1_原创 2014-03-21 19:08:59 · 882 阅读 · 0 评论 -
PL/SQL使用复合数据类型4(集合操作符、比较集合)
使用集合操作符给嵌套表赋值从Oracle 10g开始,在编写PL/SQL程序时允许将多个嵌套表的结果组合到某个嵌套表中,这项任务是使用ANSI集合操作符(SET,MULTISET UNION,MULTISET UNION DISTINCT,MULTISET INTERSECT,MULTISET EXCEPT)来完成的。(1)使用SEET操作符SET操作符用于取消特定嵌套表中的重复值。原创 2014-03-21 19:13:40 · 1078 阅读 · 0 评论 -
PL/SQL_使用复合数据类型5(批量绑定)
批量绑定批量绑定是Oracle9i新增加的特征,是指执行单次SQL操作能传递所有集合元素的数据。当在SELECT,INSERT,UPDATE,DELETE语句上处理批量数据时,通过批量绑定,可以极大地加快数据处理速度,提高应用程序的性能。首先建立示例表DEMO:CREATE TABLE tbl_demo( ID NUMBER(6) PRIMARY KEY, NAME VARCH原创 2014-03-21 19:19:24 · 932 阅读 · 0 评论 -
PL/SQL_游标使用
使用游标当在PL/SQL块中执行查询语句(SELECT)和数据操纵语句(DML)时,Oracle会为其分配上下文区(Context Area),游标是指向上下文区的指针。对于数据操纵语句和单行SELECT INTO语句来说,Oracle会为它们分配隐含游标。1、使用显式游标为了处理SELECT语句返回的多行数据,开发人员可以使用显式游标,使用显式游标包括定义游标、打开游标、提取数据和关原创 2014-03-21 19:26:38 · 1128 阅读 · 0 评论 -
PL/SQL_处理例外1(预定义例外)
当开发PL/SQL应用程序时,为了提高应用程序的健壮性,开发人员必须考虑PL/SQL程序可能出现的各种错误,并进行相应的错误处理。如果不进行错误处理,在出现运行错误时,会终止PL/SQL程序的运行,并显示错误信息。在编写PL/SQL程序时,通过使用例外(Exception)可以处理运行错误。例外分类为了处理PL/SQL应用程序的各种错误,开发人员可以使用各种类型的例外。Oracle提供了预原创 2014-03-22 11:20:43 · 1487 阅读 · 0 评论 -
PL/SQL_触发器1(触发器简介)
触发器是指存放在数据库中,并被隐含执行的存储过程。在Oracle8i之前,只允许基于表或视图的DML操作(INSERT,UPDATE和DELETE)建立触发器;而从Oracle8i开始,不仅支持DML触发器,也允许基于系统事件(启动数据库、关闭数据库、登录)和DDL操作建立触发器。触发器简介1、触发事件触发事件是指引起触发器被触发的SQL语句、数据库事件或用户事件。在Oracle8i之原创 2014-03-25 21:01:22 · 1110 阅读 · 0 评论