Oracle10g数据库管理系统_第1页
Oracle10g数据库管理系统_第2页
Oracle10g数据库管理系统_第3页
Oracle10g数据库管理系统_第4页
Oracle10g数据库管理系统_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实用数据库技术,Oracle10g数据库管理系统,学习内容,Oracle概述Oracle10g数据库安装Oracle10g数据库卸载Oracle10g常用管理工具Oracle10g表管理使用过程和触发器,Oracle概述,Oracle公司Oracle数据库,Oracle10g数据库安装,服务器安装需求版本企业版标准版个人版最低配置CPU:Pentium166内存:128MB硬盘空间:企业版(176GB):标准版(176GB):个人版(172GB)视频:256色,Oracle10g数据库安装,客户端安装需求安装类型管理者(administrator)运行时环境(runtime)自定义(custom)最低配置CPU:Pentium166内存:128MB硬盘空间:管理者(647MB):运行时环境(486MB),Oracle10g数据库安装过程,(略),Oracle数据库卸载,1、停止服务2、卸载Oracle产品3、清理注册表4、清理环境变量5、清理磁盘,Oracle卸载1/5,开始设置控制面板管理工具服务停止所有Oracle服务,Oracle卸载2/5,开始程序OracleInstallationProductsUniversalInstaller卸装所有Oracle产品,但UniversalInstaller本身不能被删除,Oracle卸载3/5,运行regeditHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices滚动这个列表,删除所有Oracle入口。HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication,除所有Oracle入口。,Oracle卸载4/5,开始设置控制面板系统高级环境变量删除环境变量CLASSPATH和PATH中有关Oracle的设定,Oracle卸载5/5,从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标删除ProgramFilesOracle目录重新启动计算机,重起后才能完全删除Oracle所在目录,删除与Oracle有关的文件,选择Oracle所在的缺省目录C:Oracle,删除这个入口目录及所有子目录,并从Windows2000目录(一般为C:WINNT)下删除以下文件ORACLE.INI、oraodbc.ini等等。,Oracle10g常用管理工具,OEM控制台SQL*PLUS工具介绍,Oracle10g表管理,在Oracle中建表,主要有两种方式:一种是在SQL*PLUS中执行建表的SQL语句。另一种是通过OEM工具。,Oracle10g数据中的数据类型,PL/SQL语言基础,注释变量声明运算符PL/SQL块结构控制语句,PL/SQL程序设计简介,PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。,SQL与PL/SQL,PL/SQL是ProcedureLanguage,PL/SQL块可以分为三类,无名块:动态构造,只能执行一次。子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们。触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。,标识符,PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同。要求和限制有:标识符名不能超过30字符;第一个字符必须为字母;不分大小写;不能用-(减号);不能是SQL保留字。,实例,下面的例子将会删除所有的纪录,而不是KING的记录。,DECLAREv_enamevarchar2(20):=KING;BEGINDELETEFROMempWHEREename=v_ename;END;,如何运行PL/SQL块结构?,如何运行PL/SQL块结构?,建议的命名方法,PL/SQL变量类型实例,插入一条记录并显示,DECLARERow_idROWID;infoVARCHAR2(40);BEGININSERTINTOdeptVALUES(90,SERVICE,BEIJING)RETURNINGrowid,dname|:|to_char(deptno)|:|locINTOrow_id,info;DBMS_OUTPUT.PUT_LINE(ROWID:|row_id);DBMS_OUTPUT.PUT_LINE(info);END;,PL/SQL变量类型实例,其中,RETURNING子句用于检索INSERT语句中所影响的数据行数,当INSERT语句使用VALUES子句插入数据时,RETURNING子句还可将列表达式、ROWID和REF值返回到输出变量中。在使用RETURNING子句是应注意以下几点限制:不能并行DML语句;不能检索LONG类型信息;当通过视图向基表中插入数据时,只能与单基表视图一起使用。,PL/SQL变量类型实例,修改一条记录并显示,DECLARERow_idROWID;infoVARCHAR2(40);BEGINUPDATEdeptSETdeptno=80WHEREDNAME=SERVICERETURNINGrowid,dname|:|to_char(deptno)|:|locINTOrow_id,info;DBMS_OUTPUT.PUT_LINE(ROWID:|row_id);DBMS_OUTPUT.PUT_LINE(info);END;,PL/SQL变量类型实例,其中,RETURNING子句用于检索被修改行信息,当UPDATE语句修改单行数据时,RETURNING子句可以检索被修改行的ROWID值,以及行中被修改列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,RETURNING子句可以将被修改行的ROWID值,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING子句的限制与INSERT语句中对RETURNING子句的限制相同。,PL/SQL变量类型实例,删除一条记录并显示,DECLARERow_idROWID;infoVARCHAR2(40);BEGINDELETEdeptWHEREDNAME=SERVICERETURNINGrowid,dname|:|to_char(deptno)|:|locINTOrow_id,info;DBMS_OUTPUT.PUT_LINE(ROWID:|row_id);DBMS_OUTPUT.PUT_LINE(info);END;,PL/SQL变量类型实例,RETURNING子句用于检索被删除行信息,当DELETE语句修改单行数据时,RETURNING子句可以检索被删除行的ROWID,以及被删除行中列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,RETURNING子句可以将被修改行的ROWID,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING子句的限制与INSERT语句中对RETURNING子句的限制相同。,复合类型,ORACLE在PL/SQL中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型-记录和表。记录类型使用%TYPE使用%ROWTYPE,记录类型,记录类型是把逻辑相关的数据作为一个单元存储起来,它必须包括至少一个标量型(数字型、字符型、布尔型、日期型)或RECORD数据类型的成员,称作PL/SQLRECORD的域(FIELD),其作用是存放互不相同但逻辑相关的信息。,定义记录类型语法如下:,TYPErecord_typeISRECORD(Field1type1NOTNULL:=exp1,Field2type2NOTNULL:=exp2,.FieldntypenNOTNULL:=expn);,实例,DECLARETYPEtest_recISRECORD(CodeVARCHAR2(10),NameVARCHAR2(30)NOTNULL:=abook);V_booktest_rec;BEGINV_book.code:=123;V_:=C+Programming;DBMS_OUTPUT.PUT_LINE(v_book.code|v_);END;,使用%TYPE,定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。使用%TYPE特性的优点在于:所引用的数据库列的数据类型可以不必知道;所引用的数据库列的数据类型可以实时改变。,实例1,DECLARE-用%TYPE类型定义与表相配的字段TYPEt_RecordISRECORD(T_noemp.empno%TYPE,T_nameemp.ename%TYPE,T_salemp.sal%TYPE);-声明接收数据的变量v_empt_Record;BEGINSELECTempno,ename,salINTOv_empFROMempWHEREempno=7788;DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_emp.t_no)|v_emp.t_name|TO_CHAR(v_emp.t_sal);END;,实例2,DECLAREv_empnoemp.empno%TYPE:=,使用%ROWTYPE,PL/SQL提供%ROWTYPE操作符,返回一个记录类型,其数据类型和数据库表的数据结构相一致。使用%ROWTYPE特性的优点在于:所引用的数据库中列的个数和数据类型可以不必知道;所引用的数据库中列的个数和数据类型可以实时改变。,实例,DECLAREv_empnoemp.empno%TYPE:=,运算符和表达式,算术运算符,运算符和表达式,关系运算符,运算符和表达式,逻辑运算符,变量赋值,在PL/SQL编程中,变量赋值是一个值得注意的地方,它的语法如下:variable是一个PL/SQL变量,expression是一个PL/SQL表达式。,variable:=expression;,字符及数字运算特点,空值加数字仍是空值:NULL+=NULL空值加(连接)字符,结果为字符:NULL|=,BOOLEAN赋值,布尔值只有TRUE,FALSE及NULL三个值。如:,DECLAREdoneBOOLEAN;/*thefollowingstatementsarelegal:*/BEGINdone:=FALSE;WHILENOTdoneLOOPNull;ENDLOOP;END;,游标赋值,游标赋值是通过SELECT语句来完成的,每次执行SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应。,游标赋值,DECLAREemp_idemp.empno%TYPE:=7788;emp_nameemp.ename%TYPE;wagesemp.sal%TYPE;BEGINSELECTename,NVL(sal,0)+NVL(comm,0)INTOemp_name,wagesFROMempWHEREempno=emp_id;DBMS_OUTPUT.PUT_LINE(emp_name|-|to_char(wages);END;结果:SCOTT-3000,可转换的类型赋值,CHAR转换为NUMBER:使用TO_NUMBER函数来完成字符到数字的转换,如:v_total:=TO_NUMBER(100.0)+sal;NUMBER转换为CHAR:使用TO_CHAR函数可以实现数字到字符的转换,如:v_comm:=TO_CHAR(123.45)|元;字符转换为日期:使用TO_DATE函数可以实现字符到日期的转换,如:v_date:=TO_DATE(2001.07.03,yyyy.mm.dd);日期转换为字符:使用TO_CHAR函数可以实现日期到字符的转换,如:v_to_day:=TO_CHAR(SYSDATE,yyyy.mm.ddhh24:mi:ss);,变量作用范围及可见性,PL/SQL的变量作用范围特点是:变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束。一个变量(标识)只能在你所引用的块内是可见的。当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)。在子块中重新定义该变量后,它的作用仅在该块内。,实例,DECLAREEmesschar(80);BEGINDECLAREV1NUMBER(4);BEGINSELECTempnoINTOv1FROMempWHERELOWER(job)=president;DBMS_OUTPUT.PUT_LINE(V1);EXCEPTIONWhenTOO_MANY_ROWSTHENDBMS_OUTPUT.PUT_LINE(Morethanonepresident);END;,实例续,DECLAREV1NUMBER(4);BEGINSELECTempnoINTOv1FROMempWHERELOWER(job)=manager;EXCEPTIONWhenTOO_MANY_ROWSTHENDBMS_OUTPUT.PUT_LINE(Morethanonemanager);END;EXCEPTIONWhenothersTHENEmess:=substr(SQLERRM,1,80);DBMS_OUTPUT.PUT_LINE(emess);END;,注释,在PL/SQL里,可以使用两种符号来写注释,即:使用双-(减号)加注释V_SalNUMBER(12,2);-工资变量。使用/*/来加一行或多行注释/*/*文件名:department_salary.sql*/*/,示例简单数据插入例子,DECLAREv_enameVARCHAR2(20):=Bill;v_salNUMBER(7,2):=1234.56;v_deptnoNUMBER(2):=10;v_empnoNUMBER(4):=8888;BEGININSERTINTOemp(empno,ename,JOB,sal,deptno,hiredate)VALUES(v_empno,v_ename,Manager,v_sal,v_deptno,TO_DATE(1954.06.09,yyyy.mm.dd);COMMIT;END;,示例简单数据删除例子,DECLAREv_empnonumber(4):=8888;BEGINDELETEFROMempWHEREempno=v_empno;COMMIT;END;,PL/SQL流程控制语句,PL/SQL的流程控制语句包括如下三类:控制语句:IF语句;循环语句:LOOP语句,EXIT语句;顺序语句:GOTO语句,NULL语句。,条件语句,IFTHENPL/SQL和SQL语句ENDIF;,IFTHENPL/SQL和SQL语句ELSE其它语句ENDIF;,条件语句,IFTHENPL/SQL和SQL语句ELSIFTHEN其它语句ELSIFTHEN其它语句ELSE其它语句ENDIF;,条件语句实例,DECLAREv_empnoemp.empno%TYPE:=,CASE表达式,CASEselectorWHENexpression1THENresult1WHENexpression2THENresult2WHENexpressionNTHENresultNELSEresultN+1END;,CASE表达式实例,DECLAREV_gradechar(1):=UPPER(,CASE表达式实例,代码运行结果:Entervalueforp_grade:Aold2:V_gradechar(1):=UPPER(Grade:AAppraisal:Excellent,循环,简单循环,LOOP要执行的语句;EXITWHEN/*条件满足,退出循环语句*/ENDLOOP;,LOOP循环实例,DECLAREintNUMBER(2):=0;BEGINLOOPint:=int+1;DBMS_OUTPUT.PUT_LINE(int的当前值为:|int);EXITWHENint=10;ENDLOOP;END;,循环,WHILE循环,WHILELOOP要执行的语句;ENDLOOP;,WHILE循环实例,DECLARExNUMBER:=1;BEGINWHILEx标号是用括起来的标识符,GOTOlabel;,GOTO和标签实例,DECLAREV_counterNUMBER:=1;BEGINLOOPDBMS_OUTPUT.PUT_LINE(V_counter的当前值为:|V_counter);V_counter:=v_counter+1;IFv_counter10THENGOTOl_ENDofLOOP;ENDIF;ENDLOOP;DBMS_OUTPUT.PUT_LINE(V_counter的当前值为:|V_counter);END;,NULL语句,DECLARE.BEGINIFv_numISNULLTHENGOTOprint1;ENDIF;NULL;-不需要处理任何数据。END;,游标概念,为了处理SQL语句获取一个表中记录,ORACLE提供一个上下文,它提供了一个指向语句的指针以及查询的活动集(activeset)。游标是一个指向上下文的句柄(handle)或指针。通过游标,PL/SQL可以控制上下文区和处理语句时上下文区会发生些什么事情。,游标概念,对于不同的SQL语句,游标的使用情况不同:,处理显式游标,显式游标处理需四个PL/SQL步骤:定义游标格式:CURSORcursor_nameISselect_statement;打开游标格式:OPENcursor_name;提取游标数据格式:FETCHcursor_nameINTOvariable_list|record_variable;关闭游标格式:CLOSEcursor_name;,示例1,DECLARECURSORc_cursorISSELECTename,salFROMempWHERErownum11;v_enameemp.ename%TYPE;v_salemp.sal%TYPE;BEGINOPENc_cursor;FETCHc_cursorINTOv_ename,v_sal;WHILEc_cursor%FOUNDLOOPDBMS_OUTPUT.PUT_LINE(v_ename|-|to_char(v_sal);FETCHc_cursorINTOv_ename,v_sal;ENDLOOP;CLOSEc_cursor;END;,示例2,DECLAREDeptRecdept%ROWTYPE;Dept_namedept.dname%TYPE;Dept_locdept.loc%TYPE;CURSORc1ISSELECTdname,locFROMdeptWHEREdeptno=30;CURSORc2(dept_noNUMBERDEFAULT10)ISSELECTdname,locFROMdeptWHEREdeptnov_num);DBMS_OUTPUT.PUT_LINE(10号部门工资总和:|v_sum|,人数:|v_num);END;,运行结果:30号部门工资总和:9400,人数:610号部门工资总和:8750,人数:3,实例5,DECLAREV_numNUMBER;V_sumNUMBER(8,2);PROCEDUREproc_demo(Dept_noNUMBERDEFAULT10,Sal_sumOUTNUMBER,Emp_countOUTNUMBER)ISBEGINSELECTSUM(sal),COUNT(*)INTOsal_sum,emp_countFROMempWHEREdeptno=dept_no;EXCEPTION,实例5续,WHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE(你需要的数据不存在!);WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);ENDproc_demo;BEGINProc_demo(30,v_sum,v_num);DBMS_OUTPUT.PUT_LINE(30号部门工资总和:|v_sum|,人数:|v_num);Proc_demo(sal_sum=v_sum,emp_count=v_num);DBMS_OUTPUT.PUT_LINE(10号部门工资总和:|v_sum|,人数:|v_num);END;,运行结果:30号部门工资总和:9400,人数:610号部门工资总和:8750,人数:3,删除过程和函数,删除过程:语法如下:DROPPROCEDUREuser.Procudure_name;删除函数:语法如下:DROPFUNCTIONuser.Function_name;,包的创建和应用,一个包由两个分开的部分组成:包定义(PACKAGE):包定义部分声明包内数据类型、变量、常量、游标、子程序和异常错误处理等元素,这些元素为包的公有元素。包主体(PACKAGEBODY):包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主体中还可以声明包的私有元素。包定义和包主体分开编译,并作为两部分分开的对象存放在数据库字典中,详见数据字典user_source,all_source,dba_source.,包的定义,创建包定义:,CREATEORREPLACEPACKAGEpackage_nameAUTHIDCURRENT_USER|DEFINERIS|AS公有数据类型定义公有数据类型定义公有游标声明公有游标声明公有变量、常量声明公有变量、常量声明公有子程序声明公有子程序声明ENDpackage_name;,包的定义,创建包主体:,CREATEORREPLACEPACKAGEBODYpackage_nameIS|AS私有数据类型定义私有数据类型定义私有变量、常量声明私有变量、常量声明私有子程序声明和定义私有子程序声明和定义公有游标定义公有游标定义公有子程序定义公有子程序定义BEGINPL/SQL语句ENDpackage_name;,包的开发步骤,与开发存储过程类似,包的开发需要几个步骤:将每个存储过程调式正确;用文本编辑软件将各个存储过程和函数集成在一起;按照包的定义要求将集成的文本的前面加上包定义;按照包的定义要求将集成的文本的前面加上包主体;使用SQLPLUS或开发工具进行调式。,创建包实例,CREATEORREPLACEPACKAGEdemo_packISDeptRecdept%ROWTYPE;FUNCTIONadd_dept(dept_noNUMBER,dept_nameVARCHAR2,locationVARCHAR2)RETURNNUMBER;FUNCTIONremove_dept(dept_noNUMBER)RETURNNUMBER;PROCEDUREquery_dept(dept_noINNUMBER);ENDdemo_pack;,创建包体实例,CREATEORREPLACEPACKAGEBODYdemo_packISFUNCTIONadd_dept(dept_noNUMBER,dept_nameVARCHAR2,locationVARCHAR2)RETURNNUMBERISempno_remainingEXCEPTION;PRAGMAEXCEPTION_INIT(empno_remaining,-1);/*-1是违反唯一约束条件的错误代码*/BEGININSERTINTOdeptVALUES(dept_no,dept_name,location);IFSQL%FOUNDTHENRETURN1;ENDIF;EXCEPTIONWHENempno_remainingTHENRETURN0;WHENOTHERSTHENRETURN-1;ENDadd_dept;,创建包体实例续,FUNCTIONremove_dept(dept_noNUMBER)RETURNNUMBERISBEGINDELETEFROMdeptWHEREdeptno=dept_no;IFSQL%FOUNDTHENRETURN1;ELSERETURN0;ENDIF;EXCEPTIONWHENOTHERSTHENRETURN-1;ENDremove_dept;,创建包体实例续,PROCEDUREquery_dept(dept_noINNUMBER)ISBEGINSELECT*INTODeptRecFROMdeptWHEREdeptno=dept_no;EXCEPTIONWHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE(数据库中没有编码为|dept_no|的部门);WHENTOO_MANY_ROWSTHENDBMS_OUTPUT.PUT_LINE(程序运行错误!请使用游标);WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);ENDquery_dept;BEGINNull;ENDdemo_pack;,调用包示例,DECLAREVarNUMBER;BEGINVar:=demo_pack.add_dept(90,Admin,Beijing);IFvar=-1THENDBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);ELSIFvar=0THENDBMS_OUTPUT.PUT_LINE(该部门记录已经存在!);ELSEDBMS_OUTPUT.PUT_LINE(添加记录成功!);Demo_pack.query_dept(90);DBMS_OUTPUT.PUT_LINE(demo_pack.DeptRec.deptno|-|demo_pack.DeptRec.dname|-|demo_pack.DeptRec.loc);var:=demo_pack.remove_dept(90);IFvar=-1THENDBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);ELSIFvar=0THENDBMS_OUTPUT.PUT_LINE(该部门记录不存在!);ELSEDBMS_OUTPUT.PUT_LINE(删除记录成功!);ENDIF;ENDIF;END;,调用结果:添加记录成功!90-Admin-Beijing删除记录成功!,子程序重载,PL/SQL允许对包内子程序进行重载。所谓重载是指两个或多个子程序有相同的名称,但拥有不同的参数变量、参数顺序或参数数据类型。,创建包实例,CREATEORREPLACEPACKAGEdemo_pack1ISDeptRecdept%ROWTYPE;V_sqlcodeNUMBER;V_sqlerrVARCHAR2(2048);FUNCTIONquery_dept(dept_noINNUMBER)RETURNINTEGER;FUNCTIONquery_dept(dept_noINVARCHAR2)RETURNINTEGER;ENDdemo_pack1;,创建包体实例,CREATEORREPLACEPACKAGEBODYdemo_pack1ISFUNCTIONcheck_dept(dept_noNUMBER)RETURNINTEGERISFlagINTEGER;BEGINSELECTCOUNT(*)INTOflagFROMdeptWHEREdeptno=dept_no;IFflag0THENRETURN1;ELSERETURN0;ENDIF;ENDcheck_dept;,创建包体实例续,FUNCTIONcheck_dept(dept_noVARCHAR2)RETURNINTEGERISFlagINTEGER;BEGINSELECTCOUNT(*)INTOflagFROMdeptWHEREdeptno=dept_no;IFflag0THENRETURN1;ELSERETURN0;ENDIF;ENDcheck_dept;,创建包体实例续,FUNCTIONquery_dept(dept_noINNUMBER)RETURNINTEGERISBEGINIFcheck_dept(dept_no)=1THENSELECT*INTODeptRecFROMdeptWHEREdeptno=dept_no;RETURN1;ELSERETURN0;ENDIF;ENDquery_dept;,创建包体实例续,FUNCTIONquery_dept(dept_noINVARCHAR2)RETURNINTEGERISBEGINIFcheck_dept(dept_no)=1THENSELECT*INTODeptRecFROMdeptWHEREdeptno=dept_no;RETURN1;ELSERETURN0;ENDIF;ENDquery_dept;ENDdemo_pack1;,删除包,语法如下:DROPPACKAGEBODYuser.package_name;DROPPROCEDUREOpenCurType;DROPPACKAGEdemo_pack;DROPPACKAGEdemo_pack1;DROPPACKAGEemp_mgmt;DROPPACKAGEemp_package;,触发器,触发器在数据库里以独立的对象存储,它与存储过程不同的是,存储过程通过其它程序来启动运行或直接启动运行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。,触发器类型,ORACLE中的触发器类型包括:DML触发器、替代触发器和系统触发器三种。1.DML触发器ORACLE可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。2.替代触发器由于在ORACLE里不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE专门为进行视图操作的一种处理方法。3.系统触发器ORACLE提供了第三种类型的触发器叫系统触发器。它可以在ORACLE数据库系统的事件中进行触发,如ORACLE系统的启动与关闭等。,触发器中的概念,触发事件:即在何种情况下触发TRIGGER,例如:INSERT,UPDATE,DELETE。触发时间:即该TRIGGER是在触发事件发生之前(BEFORE)还是之后(AFTER)触发,也就是触发事件和该TRIGGER的操作顺序。触发器本身:即该TRIGGER被触发之后的目的和意图,正是触发器本身要做的事情。例如:PL/SQL块。触发频率:说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。语句级(STATEMENT)触发器:是指当某触发事件发生时,该触发器只执行一次;行级(ROW)触发器:是指当某触发事件发生时,对受到该操作影响的每一行数据,触发器都单独执行一次。,创建触发器,创建触发器的一般语法是:,CREATEO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论