收藏 分销(赏)

Oracle10g数据库管理系统.pptx

上传人:丰**** 文档编号:10261336 上传时间:2025-05-05 格式:PPTX 页数:142 大小:1.45MB
下载 相关 举报
Oracle10g数据库管理系统.pptx_第1页
第1页 / 共142页
Oracle10g数据库管理系统.pptx_第2页
第2页 / 共142页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,北京应用技术大学软件学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,北京应用技术大学软件学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,北京应用技术大学软件学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,北京应用技术大学软件学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,北京应用技术大学软件学院,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,北京应用技术大学软件学院,*,实用数据库技术,Oracle10g,数据库管理系统,第1页,学习内容,Oracle,概述,Oracle 10g,数据库安装,Oracle 10g,数据库卸载,Oracle 10g,惯用管理工具,Oracle10g,表管理,使用过程和触发器,第2页,Oracle 概述,Oracle,企业,Oracle,数据库,第3页,Oracle 10g数据库安装,服务器安装需求,版本,企业版,标准版,个人版,最低配置,CPU,:,Pentium 166,内存:,128MB,硬盘空间:企业版,(1,76GB),:标准版,(1,76GB),:个人版,(1,72GB),视频:,256,色,第4页,Oracle 10g数据库安装,客户端安装需求,安装类型,管理者,(administrator),运行时环境,(runtime),自定义,(custom),最低配置,CPU,:,Pentium 166,内存:,128MB,硬盘空间:,管理者(647MB):运行时环境(486MB),第5页,Oracle 10g数据库安装,过程,(,略,),第6页,Oracle 数据库,卸载,1,、停顿服务,2,、卸载,Oracle,产品,3,、清理注册表,4,、清理环境变量,5,、清理磁盘,第7页,Oracle,卸载,1/5,开始设置控制面板管理工具服务停顿全部,Oracle,服务,第8页,Oracle,卸载,2/5,开始程序,Oracle Installation Products,Universal Installer,卸装全部,Oracle,产品,但,Universal Installer,本身不能被删除,第9页,Oracle,卸载,3/5,运行,regedit,HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices,滚动这个列表,删除全部,Oracle,入口。,HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication,,除全部,Oracle,入口。,第10页,Oracle,卸载,4/5,开始设置控制面板系统高级环境变量,删除环境变量,CLASSPATH,和,PATH,中相关,Oracle,设定,第11页,Oracle,卸载,5/5,从桌面上、,STARTUP,(开启)组、程序菜单中,删除全部相关,Oracle,组和图标,删除,Program FilesOracle,目录,重新开启计算机,重起后才能完全删除,Oracle,所在目录,删除与,Oracle,相关文件,选择,Oracle,所在缺省目录,C:Oracle,,删除这个入 口目录及全部子目录,并从,Windows,目录(普通为,C:WINNT,)下删除以下文件,ORACLE.INI,、,oraodbc.ini,等等。,第12页,Oracle10g,惯用管理工具,OEM,控制台,SQL*PLUS,工具介绍,第13页,Oracle10g,表管理,在,Oracle,中建表,主要有两种方式:,一个是在,SQL*PLUS,中执行建表,SQL,语句。,另一个是经过,OEM,工具。,第14页,Oracle10g,数据中数据类型,数据类型,类型说明,CHAR,字符型,最长为B,NCHAR,基于字符集字符型,同上,VARCHAR2,变长字符型,最长为,4000B,NVARCHAR2,基于字符集变长字符型,同上,VARCHAR,同,VARCHAR2,LONG,变长字符型,最长为,2GB,NUMBER(s,d),数字型,总位数为,s,位,小数位为,d,位,总长最大为,38,位,DATE,日期型,RAW,纯二进制数据类型,最长为B,LONG RAW,变长二进制数据类型,最长为,2GB,BLOB,二进制大对象类型,最长为,4GB,NLOB,包含定宽多位数字符字符大对象类型,最长为4GB,CLOB,包含单个字符字符大对象类型,最长为4GB,BFILE,数据库外大型二进制文件输入指示器类型,最大为4GB,第15页,PL/SQL,语言基础,注释,变量申明,运算符,PL/SQL,块结构,控制语句,第16页,PL/SQL,程序设计介绍,PL/SQL,是一个高级数据库程序设计语言,该语言专门用于在各种环境下对,ORACLE,数据库进行访问。因为该语言集成于数据库服务器中,所以,PL/SQL,代码能够对数据进行快速高效处理。除此之外,能够在,ORACLE,数据库一些客户端工具中,使用,PL/SQL,语言也是该语言一个特点。,第17页,SQL,与,PL/SQL,PL/SQL,是,Procedure Language&Structured Query Language,缩写。,ORACLE,SQL,是支持,ANSI(American national Standards Institute),和,ISO92(International Standards Organization),标准产品。,PL/SQL,是对,SQL,语言存放过程语言扩展。,第18页,为何使用,PL/SQL,有利于客户,/,服务器环境应用运行,适合于客户环境,第19页,PL/SQL,块结构,PL/SQL,程序由三个块组成,即申明部分、执行部分、异常处理部分。,DECLARE,/*,申明部分,:,在此申明,PL/SQL,用到变量,类型及游标,以及局部存放过程和函数*,/,BEGIN,/*,执行部分,:,过程及,SQL,语句,即程序主要部分 *,/,EXCEPTION,/*,执行异常部分,:,错误处理 *,/,END;,第20页,PL/SQL,块能够分为三类,无名块:动态结构,只能执行一次。,子程序:存放在数据库中存放过程、函数及包等。当在数据库上建立好后能够在其它程序中调用它们。,触发器:当数据库发生操作时,会触发一些事件,从而自动执行对应程序。,第21页,标识符,PL/SQL,程序设计中标识符定义与,SQL,标识符定义要求相同。要求和限制有:,标识符名不能超出,30,字符;,第一个字符必须为字母;,不分大小写;,不能用,-(,减号,);,不能是,SQL,保留字。,第22页,实例,下面例子将会删除全部纪录,而不是,KING,统计。,DECLARE,v_ename varchar2(20):=KING;,BEGIN,DELETE FROM emp WHERE ename=v_ename;,END;,第23页,怎样运行,PL/SQL,块结构?,第24页,怎样运行,PL/SQL,块结构?,第25页,提议命名方法,第26页,PL/SQL,变量类型实例,插入一条统计并显示,DECLARE,Row_id ROWID;,info VARCHAR2(40);,BEGIN,INSERT INTO dept VALUES(90,SERVICE,BEIJING),RETURNING rowid,dname|:|to_char(deptno)|:|loc,INTO row_id,info;,DBMS_OUTPUT.PUT_LINE(ROWID:|row_id);,DBMS_OUTPUT.PUT_LINE(info);,END;,第27页,PL/SQL,变量类型实例,其中,,RETURNING,子句用于检索,INSERT,语句中所影响数据行数,当,INSERT,语句使用,VALUES,子句插入数据时,,RETURNING,子句还可将列表示式、,ROWID,和,REF,值返回到输出变量中。在使用,RETURNING,子句是应注意以下几点限制:,不能并行,DML,语句;,不能检索,LONG,类型信息;,当经过视图向基表中插入数据时,只能与单基表视图一起使用。,第28页,PL/SQL,变量类型实例,修改一条统计并显示,DECLARE,Row_id ROWID;,info VARCHAR2(40);,BEGIN,UPDATE dept SET deptno=80 WHERE DNAME=SERVICE,RETURNING rowid,dname|:|to_char(deptno)|:|loc,INTO row_id,info;,DBMS_OUTPUT.PUT_LINE(ROWID:|row_id);,DBMS_OUTPUT.PUT_LINE(info);,END;,第29页,PL/SQL,变量类型实例,其中,,RETURNING,子句用于检索被修改行信息,当,UPDATE,语句修改单行数据时,,RETURNING,子句能够检索被修改行,ROWID,值,以及行中被修改列列表示式,并可将他们存放到,PL/SQL,变量或复合变量中;当,UPDATE,语句修改多行数据时,,RETURNING,子句能够将被修改行,ROWID,值,以及列表示式值返回到复合变量数组中。在,UPDATE,中使用,RETURNING,子句限制与,INSERT,语句中对,RETURNING,子句限制相同。,第30页,PL/SQL,变量类型实例,删除一条统计并显示,DECLARE,Row_id ROWID;,info VARCHAR2(40);,BEGIN,DELETE dept WHERE DNAME=SERVICE,RETURNING rowid,dname|:|to_char(deptno)|:|loc,INTO row_id,info;,DBMS_OUTPUT.PUT_LINE(ROWID:|row_id);,DBMS_OUTPUT.PUT_LINE(info);,END;,第31页,PL/SQL,变量类型实例,RETURNING,子句用于检索被删除行信息,当,DELETE,语句修改单行数据时,,RETURNING,子句能够检索被删除行,ROWID,,以及被删除行中列列表示式,并可将他们存放到,PL/SQL,变量或复合变量中;当,UPDATE,语句修改多行数据时,,RETURNING,子句能够将被修改行,ROWID,,以及列表示式值返回到复合变量数组中。在,UPDATE,中使用,RETURNING,子句限制与,INSERT,语句中对,RETURNING,子句限制相同。,第32页,复合类型,ORACLE,在,PL/SQL,中除了提供象前面介绍各种类型外,还提供一个称为复合类型类型,-,统计和表。,统计类型,使用,%TYPE,使用,%ROWTYPE,第33页,统计类型,统计类型是把逻辑相关数据作为一个单元存放起来,它必须包含最少一个标量型(数字型、字符型、布尔型、日期型)或,RECORD,数据类型组员,称作,PL/SQL RECORD,域,(FIELD),,其作用是存放互不相同但逻辑相关信息。,第34页,定义统计类型语法以下,:,TYPE record_type IS RECORD(,Field1 type1 NOT NULL :=exp1,Field2 type2 NOT NULL :=exp2,.,Fieldn typen NOT NULL :=expn );,第35页,实例,DECLARE,TYPE test_rec IS RECORD(,Code VARCHAR2(10),Name VARCHAR2(30)NOT NULL:=a book);,V_book test_rec;,BEGIN,V_book.code:=123;,V_book.name:=C+Programming;,DBMS_OUTPUT.PUT_LINE(v_book.code|v_book.name);,END;,第36页,使用,%TYPE,定义一个变量,其数据类型与已经定义某个数据变量类型相同,或者与数据库表某个列数据类型相同,这时能够使用,%TYPE,。,使用,%TYPE,特征优点在于:,所引用数据库列数据类型能够无须知道;,所引用数据库列数据类型能够实时改变。,第37页,实例,1,DECLARE,-用%TYPE 类型定义与表相配字段,TYPE t_Record IS RECORD(,T_no emp.empno%TYPE,T_name emp.ename%TYPE,T_sal emp.sal%TYPE);,-申明接收数据变量,v_emp t_Record;,BEGIN,SELECT empno,ename,sal INTO v_emp FROM emp WHERE empno=7788;,DBMS_OUTPUT.PUT_LINE,(TO_CHAR(v_emp.t_no)|v_emp.t_name|TO_CHAR(v_emp.t_sal);,END;,第38页,实例,2,DECLARE,v_empno emp.empno%TYPE:=,Type r_record is record(,v_name emp.ename%TYPE,v_sal emp.sal%TYPE,v_date emp.hiredate%TYPE);,Rec r_record;,BEGIN,SELECT ename,sal,hiredate INTO Rec FROM emp WHERE empno=v_empno;,DBMS_OUTPUT.PUT_LINE(Rec.v_name|-|Rec.v_sal|-|Rec.v_date);,END;,第39页,使用,%ROWTYPE,PL/SQL,提供,%ROWTYPE,操作符,返回一个统计类型,其数据类型和数据库表数据结构相一致。,使用,%ROWTYPE,特征优点在于:,所引用数据库中列个数和数据类型能够无须知道;,所引用数据库中列个数和数据类型能够实时改变。,第40页,实例,DECLARE,v_empno emp.empno%TYPE:=,rec emp%ROWTYPE;,BEGIN,SELECT*INTO rec FROM emp WHERE empno=v_empno;,DBMS_OUTPUT.PUT_LINE(姓名:|rec.ename|工资:|rec.sal|工作时间:|rec.hiredate);,END;,第41页,运算符和表示式,算术运算符,第42页,运算符和表示式,关系运算符,第43页,运算符和表示式,逻辑运算符,第44页,变量赋值,在,PL/SQL,编程中,变量赋值是一个值得注意地方,它语法以下:,variable,是一个,PL/SQL,变量,expression,是一个,PL/SQL,表示式。,variable :=expression;,第45页,字符及数字运算特点,空值加数字仍是空值:,NULL+=NULL,空值加(连接)字符,结果为字符:,NULL|=,第46页,BOOLEAN,赋值,布尔值只有,TRUE,FALSE,及,NULL,三个值。如:,DECLARE,done BOOLEAN;,/*the following statements are legal:*/,BEGIN,done:=FALSE;,WHILE NOT done LOOP,Null;,END LOOP;,END;,第47页,游标赋值,游标赋值是经过,SELECT,语句来完成,每次执行,SELECT,语句就赋值一次,普通要求被赋值变量与,SELECT,中列名要一一对应。,第48页,游标赋值,DECLARE,emp_id emp.empno%TYPE:=7788;,emp_name emp.ename%TYPE;,wages emp.sal%TYPE;,BEGIN,SELECT ename,NVL(sal,0)+NVL(comm,0)INTO emp_name,wages,FROM emp WHERE empno=emp_id;,DBMS_OUTPUT.PUT_LINE(emp_name|-|to_char(wages);,END;,结果:,SCOTT-3000,第49页,可转换类型赋值,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(.07.03,yyyy.mm.dd);,日期转换为字符:,使用,TO_CHAR,函数能够实现日期到字符转换,如:,v_to_day:=TO_CHAR(SYSDATE,yyyy.mm.dd hh24:mi:ss);,第50页,变量作用范围及可见性,PL/SQL,变量作用范围特点是:,变量作用范围是在你所引用程序单元(块、子程序、包)内。即从申明变量开始到该块结束。,一个变量(标识)只能在你所引用块内是可见。,当一个变量超出了作用范围,,PL/SQL,引擎就释放用来存放该变量空间(因为它可能不用了)。,在子块中重新定义该变量后,它作用仅在该块内。,第51页,实例,DECLARE,Emess char(80);,BEGIN,DECLARE,V1 NUMBER(4);,BEGIN,SELECT empno INTO v1 FROM emp WHERE LOWER(job)=president;,DBMS_OUTPUT.PUT_LINE(V1);,EXCEPTION,When TOO_MANY_ROWS THEN,DBMS_OUTPUT.PUT_LINE(More than one president);,END;,第52页,实例 续,DECLARE,V1 NUMBER(4);,BEGIN,SELECT empno INTO v1 FROM emp WHERE LOWER(job)=manager;,EXCEPTION,When TOO_MANY_ROWS THEN,DBMS_OUTPUT.PUT_LINE(More than one manager);,END;,EXCEPTION,When others THEN,Emess:=substr(SQLERRM,1,80);,DBMS_OUTPUT.PUT_LINE(emess);,END;,第53页,注释,在,PL/SQL,里,能够使用两种符号来写注释,即:,使用双,-(,减号,),加注释,V_Sal NUMBER(12,2);-,工资变量。,使用,/*/,来加一行或多行注释,/*/,/*,文件名:,department_salary.sql */,/*/,第54页,示例 简单数据插入例子,DECLARE,v_ename VARCHAR2(20):=Bill;,v_sal NUMBER(7,2):=1234.56;,v_deptno NUMBER(2):=10;,v_empno NUMBER(4):=8888;,BEGIN,INSERT INTO emp(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;,第55页,示例 简单数据删除例子,DECLARE,v_empno number(4):=8888;,BEGIN,DELETE FROM emp WHERE empno=v_empno;,COMMIT;,END;,第56页,PL/SQL,流程控制语句,PL/SQL,流程控制语句包含以下三类:,控制语句:,IF,语句;,循环语句:,LOOP,语句,,EXIT,语句;,次序语句:,GOTO,语句,,NULL,语句。,第57页,条件语句,IF THEN,PL/SQL,和,SQL,语句,END IF;,IF THEN,PL/SQL,和,SQL,语句,ELSE,其它语句,END IF;,第58页,条件语句,IF THEN,PL/SQL,和,SQL,语句,ELSIF THEN,其它语句,ELSIF THEN,其它语句,ELSE,其它语句,END IF;,第59页,条件语句 实例,DECLARE,v_empno emp.empno%TYPE:=,V_salary emp.sal%TYPE;,V_comment VARCHAR2(35);,BEGIN,SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;,IF v_salary1500 THEN,V_comment:=Fairly less;,ELSIF v_salary 3000 THEN,V_comment:=A little more;,ELSE,V_comment:=Lots of salary;,END IF;,DBMS_OUTPUT.PUT_LINE(V_comment);,END;,第60页,CASE,表示式,CASE selector,WHEN expression1 THEN result1,WHEN expression2 THEN result2,WHEN expressionN THEN resultN,ELSE resultN+1,END;,第61页,CASE,表示式 实例,DECLARE,V_grade char(1):=UPPER(,V_appraisal VARCHAR2(20);,BEGIN,V_appraisal:=,CASE v_grade,WHEN A THEN Excellent,WHEN B THEN Very Good,WHEN C THEN Good,ELSE No such grade,END;,DBMS_OUTPUT.PUT_LINE(Grade:|v_grade|Appraisal:|v_appraisal);,END;,第62页,CASE,表示式 实例,代码运行结果:,Enter value for p_grade:A,old 2:V_grade char(1):=UPPER(,new 2:V_grade char(1):=UPPER(A);,Grade:A Appraisal:Excellent,第63页,循环,简单循环,LOOP,要执行语句,;,EXIT WHEN /*,条件满足,退出循环语句*,/,END LOOP;,第64页,LOOP,循环 实例,DECLARE,int NUMBER(2):=0;,BEGIN,LOOP,int:=int+1;,DBMS_OUTPUT.PUT_LINE(int,当前值为,:|int);,EXIT WHEN int=10;,END LOOP;,END;,第65页,循环,WHILE,循环,WHILE LOOP,要执行语句;,END LOOP;,第66页,WHILE,循环 实例,DECLARE,x NUMBER:=1;,BEGIN,WHILE x,标号是用,括起来标识符,GOTO label;,第71页,GOTO,和标签 实例,DECLARE,V_counter NUMBER:=1;,BEGIN,LOOP,DBMS_OUTPUT.PUT_LINE(V_counter当前值为:|V_counter);,V_counter:=v_counter+1;,IF v_counter 10 THEN,GOTO l_ENDofLOOP;,END IF;,END LOOP;,DBMS_OUTPUT.PUT_LINE(V_counter当前值为:|V_counter);,END;,第72页,NULL,语句,DECLARE,.,BEGIN,IF v_num IS NULL THEN,GOTO print1;,END IF;,NULL;-不需要处理任何数据。,END;,第73页,游标概念,为了处理,SQL,语句获取一个表中统计,,ORACLE,提供一个上下文,它提供了一个指向语句指针以及查询活动集,(active set),。游标是一个指向上下文句柄,(handle),或指针。经过游标,,PL/SQL,能够控制上下文区和处理语句时上下文区会发生些什么事情。,第74页,游标概念,对于不一样,SQL,语句,游标使用情况不一样:,第75页,处理显式游标,显式游标处理需四个,PL/SQL,步骤:,定义游标,格式:,CURSOR cursor_name IS select_statement;,打开游标,格式:,OPEN cursor_name;,提取游标数据,格式:,FETCH cursor_name INTO variable_list|record_variable;,关闭游标,格式:,CLOSE cursor_name;,第76页,示例,1,DECLARE,CURSOR c_cursor IS SELECT ename,sal FROM emp WHERE rownum11;,v_ename emp.ename%TYPE;,v_sal emp.sal%TYPE;,BEGIN,OPEN c_cursor;,FETCH c_cursor INTO v_ename,v_sal;,WHILE c_cursor%FOUND LOOP,DBMS_OUTPUT.PUT_LINE(v_ename|-|to_char(v_sal);,FETCH c_cursor INTO v_ename,v_sal;,END LOOP;,CLOSE c_cursor;,END;,第77页,示例,2,DECLARE,DeptRec dept%ROWTYPE;,Dept_name dept.dname%TYPE;,Dept_loc dept.loc%TYPE;,CURSOR c1 IS,SELECT dname,loc FROM dept WHERE deptno=30;,CURSOR c2(dept_no NUMBER DEFAULT 10)IS,SELECT dname,loc FROM dept WHERE deptno=dept_no;,CURSOR c3(dept_no NUMBER DEFAULT 10)IS,SELECT*FROM dept WHERE deptno 20);,LOOP,FETCH c3 INTO deptrec;,EXIT WHEN c3%NOTFOUND;,DBMS_OUTPUT.PUT_LINE(deptrec.deptno|-|deptrec.dname|-|deptrec.loc);,END LOOP;,CLOSE c3;,END;,第79页,游标属性,%FOUND,布尔型属性,当最近一次读统计时成功返回,则值为,TRUE,;,%NOTFOUND,布尔型属性,与,%FOUND,相反;,%ISOPEN,布尔型属性,当游标已打开时返回,TRUE,;,%ROWCOUNT,数字型属性,返回已从游标中读取统计数。,第80页,示例,DECLARE,v_empno emp.empno%TYPE;,v_sal emp.sal%TYPE;,CURSOR c_cursor IS SELECT empno,sal FROM emp;,BEGIN,OPEN c_cursor;,LOOP,FETCH c_cursor INTO v_empno,v_sal;,EXIT WHEN c_cursor%NOTFOUND;,IF v_sal=1200 THEN,UPDATE emp SET sal=sal+50 WHERE empno=v_empno;,DBMS_OUTPUT.PUT_LINE(,编码为,|v_empno|,工资已更新,!);,END IF;,DBMS_OUTPUT.PUT_LINE(,统计数,:|c_cursor%ROWCOUNT);,END LOOP;,CLOSE c_cursor;,END;,第81页,游标,FOR,循环,FOR index_variable IN cursor_namevalue,value LOOP,-,游标数据处理代码,END LOOP;,第82页,游标中使用,FOR,循环示例,DECLARE,CURSOR c_sal IS SELECT empno,ename,sal FROM emp;,BEGIN,-,隐含打开游标,FOR v_sal IN c_sal LOOP,-,隐含执行一个,FETCH,语句,DBMS_OUTPUT.PUT_LINE(to_char(v_sal.empno)|-|,v_sal.ename|-|to_char(v_sal.sal);,-,隐含监测,c_sal%NOTFOUND,END LOOP;,-,隐含关闭游标,END;,第83页,有参数游标中使用,FOR,循环示例,DECLARE,CURSOR c_cursor(dept_no NUMBER DEFAULT 10)IS,SELECT dname,loc FROM dept WHERE deptno 30),DBMS_OUTPUT.PUT_LINE(c1_rec.dname|-|c1_rec.loc);,END LOOP;,DBMS_OUTPUT.PUT_LINE(CHR(10)|,使用默认,dept_no,参数值,10,:,);,FOR c1_rec IN c_cursor LOOP,DBMS_OUTPUT.PUT_LINE(c1_rec.dname|-|c1_rec.loc);,END LOOP;,END;,第84页,游标,FOR,循环语句中使用子查询来实现游标 实例,BEGIN,FOR c1_rec IN(SELECT dname,loc FROM dept)LOOP,DBMS_OUTPUT.PUT_LINE(c1_rec.dname|-|c1_rec.loc);,END LOOP;,END;,第85页,处理隐式游标,当查询返回结果超出一行时,就需要一个显式游标。显式游标主要是用于对查询语句处理,尤其是在查询结果为多条统计情况下;而对于非查询语句,如修改、删除操作,则由,ORACLE,系统自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建游标称为隐式游标,隐式游标名字为,SQL,,这是由,ORACLE,系统定义。对于隐式游标操作,如定义、打开、取值及关闭操作,都由,ORACLE,系统自动地完成,无需用户进行处理。用户只能经过隐式游标相关属性,来完成对应操作。在隐式游标工作区中,所存放数据是与用户自定义显示游标无关、最新处理一条,SQL,语句所包含数据。,第86页,处理隐式游标,格式调用为:,SQL%,当执行一条,DML,语句后,,DML,语句结果保留在四个游标属性中,这些属性用于控制程序流程或者了解程序状态。当运行,DML,语句时,,PL/SQL,打开一个内建游标并处理结果,游标是维护查询结果内存中一个区域,游标在运行,DML,语句时打开,完成后关闭。,第87页,处理隐式游标,隐式游标只使用,SQL%FOUND,、,SQL%NOTFOUND,、,SQL%ROWCOUNT,三个属性,,SQL%FOUND,,,SQL%NOTFOUND,是布尔值,,SQL%ROWCOUNT,是整数值。,第88页,处理隐式游标,SQL%FOUND,,布尔型属性,当最近一次读统计时成功返回,则值为,TRUE,。在执行任何,DML,语句前,SQL%FOUND,和,SQL%NOTFOUND,值都是,NULL,,在执行,DML,语句后,,SQL%FOUND,属性值将是:,INSERT,为,TRUE,;,DELETE,和,UPDATE,,最少有一行被,DELETE,或,UPDATE,为,TRUE,;,SELECT INTO,最少返回一行为,TRUE,;,SQL%FOUND,为,TRUE,时,SQL%NOTFOUND,为,FALSE,。,第89页,处理隐式游标 示例,DECLARE,V_deptno emp.deptno%TYPE:=,BEGIN,DELETE FROM emp WHERE deptno=v_deptno;,IF SQL%NOTFOUND THEN,DELETE FROM dept WHERE deptno=v_deptno;,END IF;,END;,第90页,异常错误处理,异常情况处理是用来处理正常执行过程中未预料事件,程序块异常处理预定义错误和自定义错误,因为,PL/SQL,程序块一旦产生异常而没有指出怎样处理时,程序就会自动终止整个程序运行。,第91页,有三种类型异常:,预定义,(Predefined),异常,ORACLE,预定义异常情况大约有,24,个。对这种异常情况处理,无需在程序中定义,由,ORACLE,自动将其引发。,非预定义,(Predefined),异常,即其它标准,ORACLE,错误。对这种异常情况处理,需要用户在程序中定义,然后由,ORACLE,自动将其引发。,用户定义,(User_define),异常,程序执行过程中,出现编程人员认为非正常情况。对这种异常情况处理,需要用户在程序中定义,然后显式地在程序中将其引发。,第92页,异常处理部分结构,EXCEPTION,WHEN first_exception THEN ,WHEN second_exception THEN ,WHEN OTHERS THEN ,END;,第93页,预定义异常处理,第94页,实例,DECLARE,v_empno emp.empno%TYPE:=,v_sal emp.sal%TYPE;,BEGIN,SELECT sal INTO v_sal FROM emp WHERE empno=v_empno;,IF v_sal=1500 THEN,UPDATE emp SET sal=sal+100 WHERE empno=v_empno;,DBMS_OUTPUT.PUT_LINE(,编码为,|v_empno|,员工工资已更新,!);,ELSE,DBMS_OUTPUT.PUT_LINE(,编码为,|v_empno|,员工工资已经超出要求值,!);,END IF;,EXCEPTION,WHEN NO_DATA_FOUND THEN,DBMS_OUTPUT.PUT_LINE(,数据库中没有编码为,|v_empno|,员工,);,WHEN TOO_MANY_ROWS THEN,DBMS_OUTPUT.PUT_LINE(,程序运行错误,!,请使用游标,);,WHEN OTHERS THEN,DBMS_OUTPUT.
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服