PL/SQL程序设计.ppt

上传人:牧羊曲112 文档编号:6514887 上传时间:2023-11-08 格式:PPT 页数:107 大小:338.50KB
返回 下载 相关 举报
PL/SQL程序设计.ppt_第1页
第1页 / 共107页
PL/SQL程序设计.ppt_第2页
第2页 / 共107页
PL/SQL程序设计.ppt_第3页
第3页 / 共107页
PL/SQL程序设计.ppt_第4页
第4页 / 共107页
PL/SQL程序设计.ppt_第5页
第5页 / 共107页
点击查看更多>>
资源描述

《PL/SQL程序设计.ppt》由会员分享,可在线阅读,更多相关《PL/SQL程序设计.ppt(107页珍藏版)》请在三一办公上搜索。

1、PL/SQL程序设计 讲师:张浒滨,主要内容,3.1 PL/SQL的优点:3.2 运行PL/SQL程序3.3 PL/SQL块结构 3.4 PL/SQL基本语法3.5 PL/SQL 处理流程3.6 异常处理3.7 游标3.8 存储过程和函数3.9 触发器,认识PL/SQL PL/SQL(procedure language/sql)是oracle在标准的sql语言上的扩展,PL/SQL不仅允许嵌入SQL语言,还可以定义变量和常量,允许使用条件控制语句和循环语句,允许使用例外处理语句处理各种异常,这样使得它的功能强大,3.1 PL/SQL的优点,有利于客户/服务器环境应用的运行 使用PL/SQL进

2、行编程,将大量数据处理的应用放在服务器端来执行,省去了数据在网上的传输时间。适合于客户环境由于PL/SQL分为数据库PL/SQL部分和工具PL/SQL。对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端的PL/SQL程序运行。,3.3 PL/SQL块结构,PL/SQL程序由三个块组成,即 声明部分、执行部分、异常处理部分。PL/SQL块的结构如下:Declare/*声明部分:在此 声明PL/SQL用到的变量,类型*/Begin/*执行部分:过程及SQL 语句,即程序的主要部分*/Exception/*执行异常部

3、分:错误处理*/End;,其中 执行部分是必须的。而END则是PL/SQL 块的结束标记。需要注意的是DECLARE,BEGIN,EXCEPTION后面没有分号(;),而END后则必须要带有分号。PL/SQL标识符的命名规则:标识符的最大长度是30个字符,包括字母、数字、$、_、#;不可包含保留字;要以字来打头;不能和同一块中的表中的字段名一样,标识符不区分大小写,TYPE与type是完全一样的,【案例】:编写一个程序块,从emp表中显示名为“SMITH”的雇员的薪水和职位。declare v_emp emp%rowtype;emp表中所有字段的类型 begin select*into v_e

4、mp from emp where ename=SMITH;dbms_output.put_line(v_emp.job|-|v_emp.sal);/(员工的工作是:|v_emp.job)end;执行用/,【例3-1】只包含执行部分的PL/SQL块SQL set serveroutput on 每次打开服务器都要打开SQL begin 2 dbms_output.put_line(Welcome!);3 end;4/Welcome!PL/SQL 过程已成功完成。注意:当使用dbms_output.包输出数据或消息时,必须要将SQL*Plus的环境变量serveroutput 设置为on.,【例

5、3-2】包含定义部分和执行部分的PL/SQL块程序案例:请编写一段pl/sql程序,用于查询指定用户的薪水,要求员工编号从键盘输入,显示员工名称和对应薪水declare v_ename varchar2(10);v_sal number(7,2);begin select ename,sal into v_ename,v_sal from emp where empno=/,输入 no 的值:7788PL/SQL 过程已成功完成。注意:该例中当执行该PL/SQL时,会根据输入的学号显示雇员名字和薪水。为了临时存放雇员编号,就必须先定义变量。&aa为PL/SQL中的替代变量。,3.4 PL/SQ

6、L基本语法,3.4.1 常量与变量,定义常量的语法格式:常量名 constant 类型 not null:=值;常量包括后面的变量名都必须以字母开头,不能有空格,不能超过30个字符长度,同时不能和保留字同名,常(变)量名称不区分大小写,在字母后面可以带数字或特殊字符。括号内的not null为可选参数,若选用,表明该常(变)量不能为空值。,【例3-4】常量定义 declare a constant number(10):=123;begin dbms_output.put_line(a);end;/PL/SQL 过程已成功完成,执行结果为:,基本数据类型变量,PL/SQL中常用的基本数据类型,

7、常用:varchar2 可变长度字符串。number 可变长度数值。char 固定长度字符串。boolean 布尔数据类型,支持true/false值。非常用:clob 字符大对象,可用来保存多达4GB的字符数据。date 存储全部日期的固定长度字符串。long 可变长度字符串。integer 表示整数raw 二进制数据的可变长度字符串。blob 二进制大对象,可以用来保存图像和文档等二进制数据。,3.4.3 基本数据类型变量的定义方法,变量名 类型标识符 not null:=值;【例3-5】程序定义了名为age的数字型变量,长度为3,初始值为26declarev_age number(3):

8、=26;begincommit;dbms_output.put_line(v_age);end;/PL/SQL 过程已成功完成。,3.4.4 复合数据类型变量,使用%type定义变量为了让PL/SQL中变量的类型和数据表中的字段的数据类型一致,Oracle 9i提供了%type定义方法。这样当数据表的字段类型修改后,PL/SQL程序中相应变量的类型也自动修改。,【案例】该程序定义了两个变量,其类型和 emp表中的 字段类型是一致的。declare v_ename emp.ename%type;v_sal emp.sal%type;begin select ename,sal into v_en

9、ame,v_sal from emp where empno=,自定义记录类型变量很多结构化程序设计语言都提供了记录类型的数据类型,在PL/SQL中,也支持将多个基本数据类型捆绑在一起的记录数据类型。,记录类型定义的一般格式:定义一个记录类型的数据(类似C语言中的结构体,也类似JAVA中的类,用于存放多个变量):declaretype emp_record_type is record(/可以取不同表中的字段name emp.ename%type,salary emp.sal%type,title emp.job%type);sp_record emp_record_type;begin se

10、lect ename,sal,job into sp_record from emp where empno=7788;dbms_output.put_line(员工姓名为:|sp_record.name);end;说明标识符emp_record_type是定义的记录类型名;要定义记录型变量,定义方法与前面标量型变量定义一样。记录类型变量的属性引用方法是.引用。,使用%rowtype属性定义记录型变量使用%type可以使变量获得字段的数据类型,使用%rowtype可以使变量获得整个记录的数据类型。该属性可以基于表或视图定义记录变量。为了简化表或视图所有列数据的处理,应该使用该属性定义记录变量。

11、【案例】执行下列PL/SQL程序,程序定义了名为myrecord的复合类型变量,与emp表结构相同,案例用于从键盘得到员工编号,然后输出姓名、工资、奖金及雇佣日期,declare myrecord emp%rowtype;begin select*into myrecord from emp where empno=,ORACLE编写的程序一般分为两类:存储过程:是可以完成一定功能的程序叫存储过程;函数:是在使用时给出一个或多个值,处理完后返回一个或多个结果的程序叫函数;这两类程序都存放在Oracle数据库字典中。,3.8存储过程和函数,与其它的数据库系统一样,Oracle的存储过程是用PL/

12、SQL语言编写的能完成一定处理功能的存储在数据库字典中的程序。创建过程语法:CREATE OR REPLACE PROCEDURE 过程名(参数名 IN|IN OUT 数据类型.)IS|AS PL/SQL块,3.8.1 存储过程,创建一个存储过程,用于实现向表中添加数据先创建一张mytest表 create table mytest(id number);create or replace procedure sp_pro1(v_id in number)is/number(5,2)编译错误/ename in varchar(2000)begin insert into mytest valu

13、es(v_id);end;,【案例一】建立有参存储过程,建立无参数的存储过程【案例二】以下过程用于输出当前系统日期和时间。create or replace procedure sp_pro1 isbegindbms_output.put_line(systimestamp);end;/过程已创建。,建立了存储过程sp_pro1之后,就可以调用该过程。在SQL*Plus环境中调用过程:使用execute命令调用过程SQL set serveroutput on;SQL exec sp_pro1;call19-3月-12 07.23.59.265000000 下午+08:00 PL/SQL 过程

14、已成功完成。,建立带有IN参数的存储过程建立存储过程时,可以通过使用输入参数,将应用程序的数据传递到过程中,如果不指定参数模式,则默认是输入参数,可以使用IN关键字显示地定义输入参数。【案例】创建一个过程,能向dept表中添加一个新记录.(in参数)首先创建一张和dept表一样的表deptcp表,create or replace procedure insert_dept(dept_no in number,dept_name in varchar2,dept_loc in varchar2)is begin insert into deptcp values(dept_no,dept_na

15、me,dept_loc);end;调用该存储过程:begin insert_dept(50,技术部,武汉);end;或者直接exec insert_dept(50,技术部,武汉);,建立OUT参数的存储过程过程不仅可以用来执行特定操作,而且也可以用于输出数据,在过程中输出数据是使用OUT参数来完成的,当定义输出参数时,必须提供OUT关键字。请看下面的案例,利用in和out参数传递的方式调用一个存储过程【案例】创建一个过程,从emp表中带入雇员的姓名,返回该雇员的薪水值。(out参数,然后调用过程,请同学们先编写这个过程,create or replace procedure find_emp3

16、(emp_name in varchar2,emp_sal out number)is v_sal number(5);begin select sal into v_sal from emp where ename=emp_name;emp_sal:=v_sal;exception when no_data_found then emp_sal:=0;end;存储过程调用:declare v_sal number(5);begin find_emp3(ALLEN,v_sal);dbms_output.put_line(v_sal);end;,建立带IN OUT参数的存储过程定义过程时,不仅可

17、以指定IN和OUT参数,也可以指定IN OUT参数。IN OUT参数也称为输入输出参数,当使用这种参数时,在调用过程之前需要通过变量给该参数传递数据。在调用结束后,Oracle 会通过该变量将过程结果传递给应用程序。练习:创建一个存储过程,用于实现将empcp表中的SCOTT用户的工资修改4547,首先要创建一张和emp表一样的empcp表,再创建过程,并调用执行,-创建存储过程:create or replace procedure sp_pro3(spname varchar2,newsal number)isbegin update empcp set sal=newsal where

18、ename=spname;end;-执行存储过程:exec sp_pro3(SCOTT,4547);,Oracle的函数是一个独有的对象,它也是由PL/SQL语句编写而成。与存储过程不同的是函数必须返回某些值,而存储过程可以不返回任何值。创建函数的语法如下:CREATE OR REPLACE FUNCTION 函数名(argment in|in out TYPE,argment in|out|in out TYPE,.RETURN datatype IS|AS PL/SQL 块;,3.8.2 函数,建立无参数的函数当建立函数时,函数可以带有参数,也可以不带参数。【例 3-26】建立用于显示当前

19、数据库用户的函数。(不带任何参数)CREATE OR REPLACE FUNCTION get_userreturn varchar2ASv_user varchar2(100);BEGINselect username into v_user from user_users;return v_user;END;函数已创建。,建立带IN参数的函数 案例:创建一个函数,它以部门号作为参数传递并且使用函数显示那个部门名称与位置,然后调用此函数。create or replace function find_dept(dept_no number)return dept%rowtype is v_d

20、ept dept%rowtype;begin select*into v_dept from dept where deptno=dept_no;return v_dept;end;,调用函数:declare v_dept dept%rowtype;begin v_dept:=find_dept(30);dbms_output.put_line(v_dept.dname|-|v_dept.loc);end;,提高数据的安全性与完整性利用安全性的权限来控制那些没有足够权限用户对数据库的间接访问。通过把相关联的表的操作集中到一起,保证对这些相关联的表执行一致的操作,或者任何操作都不做。改善操作性能

21、多个用户使用同一个SQL语句时,只需做一次语法分析,只在编译时进行语法分析,运行时不再重做,可以直接调用缓存中的编译代码。,3.8.4 过程和函数的优点,3.2 运行PL/SQL程序,PL/SQL程序的运行是通过Oracle中的一个引擎来进行的。这个引擎可能在Oracle的服务器端,也可能在 Oracle 应用开发的客户端。引擎执行PL/SQL中的过程性语句,然后将SQL语句发送给数据库服务器来执行,再将结果返回给执行端。例如,如果应用程序需要取得学生的成绩,那么可以建立函数实现该项功能。,3.5 PL/SQL 处理流程,在PL/SQL程序中,要使程序能按照逻辑进行处理,除了有些语句是SQL语

22、句外,还必须有能进行逻辑控制的语句。PL/SQL 也不例外,它不仅可以嵌入SQL语句,而且还支持条件分支语句(IF,CASE)、循环语句(LOOP)。,格式:if thenPL/SQL 和 SQL语句;else其它语句;elsif then其它语句;End if;,3.5.1 条件分支语句,【案例】判断两个整数变量的大小,输出不同的结果。set serveroutput ondeclarenumber1 integer:=80;number2 integer:=90;beginif number1=number2 thenif number1=number2 thendbms_output.p

23、ut_line(number1等于number2);elsedbms_output.put_line(number1小于number2);end if;elsedbms_output.put_line(number1大于number2);end if;end;/,思考:如何判断从键盘得到两个数的大小,上述程序该如何修改?,-从键盘得到两个数,程序用于判断这两个数的大小 declare v_number1 number;v_number2 number;begin v_number1:=,-if语句的使用:-编写一个存储过程,可以输入一个雇员名称,若该雇员的工资低于2000,就给该雇员的工资增加

24、10%:create or replace procedure sp_pro6(v_ename varchar2)isv_sal empcp.sal%type;begin select sal into v_sal from empcp where ename=v_ename;if v_sal=2000 then update empcp set sal=sal*1.1 where ename=v_ename;end if;end;,-二重条件分支-编写一个存储过程,可以输入一个雇员名称,若该雇员的津贴不是0就在原来的基础上增加100,如果津贴是0就把津贴设置为100;create or re

25、place procedure sp_pro6(v_ename varchar2)isv_comm m%type;begin select comm into v_comm from empcp where ename=v_ename;if v_comm 0 then update empcp set comm=comm+100 where ename=v_ename;else update empcp set comm=comm+100 where ename=v_ename;end if;end;,多重条件分支:编写一个存储过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就

26、给他的工资增加1000,如果该雇员的职位是MANAGER就个他的工资-增加500,其他职位的员工增加200:create or replace procedure sp_pro6(v_empno number)isv_job empcp.job%type;begin select job into v_job from empcp where empno=v_empno;if v_job=PRESIDENT then update empcp set sal=sal+1000 where empno=v_empno;elsif v_job=MANAGER then update empcp s

27、et sal=sal+500 where empno=v_empno;else update empcp set sal=sal+200 where empno=v_empno;end if;end;,从Oracle9i开始,不仅可以使用IF语句,也可以使用CASE语句来执行多重条件分支操作。使用CASE语句更加简捷,而且执行效率也更好。在CASE语句中使用单一选择符进行等值比较格式:CASE WHEN THEN 语句1;WHEN THEN 语句1;WHEN THEN 语句1;ELSE 语句n+1;END CASE;,3.5.2 CASE语句,在CASE语句中使用多种条件比较 格式:CASE

28、WHEN THEN 语句1;WHEN THEN 语句1;WHEN THEN 语句1;ELSE 语句n+1;END CASE;练习:请编写一段程序,从键盘得到一个用户名,据此用户名给该用户实现加薪政策,create or replace procedure sp_pro1(v_ename emp.ename%type)isv_deptno emp.deptno%type;begin select deptno into v_deptno from emp where ename=v_ename;case v_deptno when 10 then update emp set sal=sal+1

29、0 where ename=v_ename;when 20 then update emp set sal=sal+20 where ename=v_ename;else update emp set sal=sal+30 where ename=v_ename;end case;commit;end;,另外一种case方式:程序如下:create or replace procedure sp_pro1(v_ename emp.ename%type)isv_deptno emp.deptno%type;begin select deptno into v_deptno from emp wh

30、ere ename=v_ename;case when v_deptno=10 then update emp set sal=sal+10 where ename=v_ename;when v_deptno=20 then update emp set sal=sal+20 where ename=v_ename;else update emp set sal=sal+30 where ename=v_ename;end case;commit;end;,查询中的case语句:即case表达式,如以下查询select empno,ename,sal,case deptno when 10 t

31、hen 财务部 when 20 then 研发部 when 30 then 销售部 else 未知部门 end 部门 from emp;DECODE()函数 和case表达式类似,decode()函数也用于实现多路分支结构 select empno,ename,sal,decode(deptno,10,财务部,20,研发部,30,销售部,未知部门)部门 from emp;,基本循环Loop要执行的语句;exit when condition;end loop;当使用基本循环时,无论是否满足条件,语句至少会被执行一次。当condition为TURE时,会退出循环,并执行END LOOP后的相应操

32、作。,3.5.3 循环语句,-编写一个过程,可以输入用户名,并自动循环添加10个用户到users表中:1、loop循环实现create or replace procedure sp_pro6(uname varchar2)is v_id number:=1;begin loop insert into users values(v_id,uname);exit when v_id=10;v_id:=v_id+1;end loop;end;,WHILE 循环格式:while loop 要执行的语句;end loop;只有条件为真时,才会执行循环体内的语句。,while.loop循环实现:cre

33、ate or replace procedure sp_pro6(uname varchar2)is v_id number:=1;begin while v_id=10 loop insert into users values(v_id,uname);v_id:=v_id+1;end loop;end;,编写一个过程,可以输入用户名,并自动循环添加10个用户到users表中:,FOR循环 格式:FOR 循环控制变量 IN REVERSE 下界值 上界值 LOOP statement1;statement2;END LOOP;当使用FOR循环时,每次循环时循环控制变量会自动增一;如果指定RE

34、VERSE选项,那么每次循环时循环控制变量会自动减一。,for循环实现:create or replace procedure sp_pro6(uname varchar2)is v_id number:=1;begin for v_id in reverse 1.10 loop insert into users values(v_id,uname);end loop;end;,编写一个过程,可以输入用户名,并自动循环添加10个用户到users表中:,游 标,在PL/SQL 中处理查询语句和数据操纵语句时,Oracle 必须分配一片叫上下文(context area)的区域来处理所必需的信息

35、,其中包括:要处理的行的数目;一个指针,指向语句被分析以后的表示形式;查询的活动集(active set)。游标是一个指向上下文的句柄(handle)或指针。通过游标,PL/SQL 可以控制上下文区和处理语句时上下文区会发生的事情。,在PL/SQL程序中定义的游标称作显式游标。显式游标包括:定义游标打开游标 确定指向哪个表提取数据(也称为推进游标)关闭游标,3.7.1 显式游标,定义游标 cursor 游标名 is 查询语句;其中:游标名是一个没有定义的PL/SQL 变量,用户不能给游标名赋值。参数名是一个在SELECT语句的WHERE条件中要用到的参数。SELECT语句是一个不含INTO子句

36、的SELECT语句,允许带WHERE、ORDER BY、GROUP BY等子句。,打开游标打开游标是在SELECT语句的所有输入参数都接受值之后,执行游标所对应的SELECT语句,将其查询结果放入工作区,指针指向工作区的首部。假如在打开游标时查询没有返回行,PL/SQL 没有触发错误,可以在取数据(FETCH)之后检测游标的状态。open 游标名称;,提取数据在打开游标之后,SELECT语句的结果被临时存放到游标结果集中,为了处理结果的数据,需要使用FETCH语句提取游标数据。fetch 游标名称 into 变量列表;关闭游标close 游标名称;,初步认识指针,游标:declarecurso

37、r mycur1 is select*from emp;empinfo emp%rowtype;cou number;beginfor empinfo in mycur1 loopcou:=mycur1%rowcount;dbms_output.put_line(cou|-|雇员编号是:|empinfo.empno);dbms_output.put_line(cou|-|雇员姓名是:|empinfo.ename);end loop;end;,编写第一个游标,输出emp表中所有员工的信息。declare cursor mycur is select*from emp;empinfo emp%ro

38、wtype;begin if mycur%isopen then null;else open mycur;end if;fetch mycur into empinfo;while(mycur%found)loop dbms_output.put_line(雇员编号:|empinfo.empno);dbms_output.put_line(雇员姓名:|empInfo.ename);fetch mycur into empinfo;end loop;close mycur;end;,练习:一次性上涨全部雇员的工资。根据它所在的部门涨工资,规则:.10部门上涨10%.20部门上涨20%.30部门

39、上涨30%所有部门员工上涨后的工资最多不能超过5000,如果超过5000,则工资就为5000。,declarecursor mycur is select*from emp;empInfo emp%rowtype;v_sal emp.sal%type;beginfor empInfo in mycur loopif empInfo.deptno=10 thenv_sal:=empInfo.sal*1.1;elsif empInfo.deptno=20 thenv_sal:=empInfo.sal*1.2;elsif empInfo.deptno=30 thenv_sal:=empInfo.sa

40、l*1.3;end if;if v_sal 5000 thenv_sal:=5000;end if;update emp set sal=v_sal where empno=empInfo.empno;end loop;end;,所有的SQL 语句在上下文区内部都是可执行的,因此都有一个游标指向上下文区,此游标就是所谓的SQL游标(SQL cursor),即隐式游标。与显式游标不同,SQL 游标不被程序打开和关闭。当一个DML语句执行时,PL/SQL内部打开一个游标,语句的结果被保存在4个游标属性中。SQL%FOUNDSQL%NOTFOUNDSQL%ROWCOUNTSQL%ISOPEN游标是一

41、块包含有查询信息的内存空间。在执行DML语句,游标被打开;当语句完成时,游标被关闭。,3.7.2 隐式游标,【案例】更新dept表,将部门号为80的部门名称修改为总经办公室,如果没有这条记录,则向dept表写入该条记录 declare begin update dept set dname=总经办公室 where deptno=80;if sql%notfound then insert into dept values(80,总经办公室,南昌);end if;commit;end;,异常处理,在程序运行的时候出现的错误就称为异常,发生异常后,语句将停止执行,PL/SQL引擎立即将控制权转到P

42、L/SQL块的异常处理部分,异常处理机制简化了代码的错误检测,PL/SQL中任何异常出现时,每个异常都应该对应一个异常码和异常信息,比如:declarev_sal emp.sal%type;beginselect sal into v_sal from emp;end;ORA-01422:实际返回的行数超出请求的行数,编写一个程序用于显示emp表中前五行数据记录:declare cursor cur_s is select*from emp;empinfo emp%rowtype;con number(3);beginfor empinfo in cur_s loopcon:=cur_s%ro

43、wcount;if con between 1 and 5 thendbms_output.put_line(con|-|empinfo.ename);end if;end loop;end;,异常处理,一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复。Oracle 提供异常情况(EXCEPTION)和异常处理(EXCEPTION HANDLER)来实现错误处理。虽然在PL/SQL编程中,异常处理不是必须的,但建议编程人员要养成在PL/SQL编程中指定相应的异常。,异常处理是用来处理正常执行过程中未预料的事件,异常处理包括预定义的错误和自定义错误。PL/SQL程序块一旦产生异

44、常而没有指出如何处理时,程序就会自动终止整个程序运行。EXCEPTION when exception1 then statement1;when exception2 then statement2;.when others then statement;END;其中:异常处理可以按任意次序排列,但 Others 必须放在最后。,3.6.1 异常处理概念,两种类型的异常:用户定义(user_define)异常和预定义(predefined)异常。为了方便oracle开发和维护,在oracle异常中,为常见的异常码定义了对应的异常名称,称为预定义异常当使用预定义异常处理时,应该了解PL/SQL

45、 块的常见运行错误,并掌握与之相关的预定义异常处理。,预定义的异常处理,案例:异常处理:declarev_sal emp.sal%type;beginselect sal into v_sal from emp;exceptionwhen too_many_rows thendbms_output.put_line(返回的记录太多);when othersdbms_output.put_line(未知异常);end;,自定义异常除了预定义异常外,用户还可以自定义异常,自定义异常可以让用户采用与PL/SQL引擎处理错误相同的方式进行处理,用户自定义异常的两个关键点:异常定义:在PL/SQL块的声

46、明部分采用exception关键字来声明异常,定义方法与定义变量相同,比如声明一个myexception的异常方法是:myexception exception;异常引发:在程序可执行区域,使用raise关键字来进行引发,比如引发myexception的方法是:raise myexception;,案例:自定义异常declare v_sal emp.sal%type;myexp exception;begin select sal into v_sal from emp where ename=JAMES;if v_sal5000 then raise myexp;end if;excepti

47、on when no_data_found then dbms_output.put_line(没有记录发现!);when myexp then dbms_output.put_line(工资太少了,怎么向老婆交叉!);end;,引发应用程序异常:在oracle开发中,遇到的系统异常都有对应的异常码,在应用系统开发中,用户自定义的异常也可以指定一个异常码和异常信息,oracle系统为用户预留了自定义的异常码,其范围是-20000到-20999之间的负整数,其语法是:raise_application_error(异常码,异常信息),请看案例:declare v_sal emp.sal%type

48、;myexp exception;begin select sal into v_sal from emp where ename=JAMES;if v_sal5000 then raise myexp;end if;exception when no_data_found then dbms_output.put_line(没有记录发现!);when myexp then raise_application_error(-20000,工资太少了,怎么向老婆交叉!);end;,表空间、数据库对象.同义词概念.序列的应用.视图的概念.索引的概念.表空间的概念,.1.Oracle数据库对象.数据库

49、对象是数据库的组成部分,常常用create命令进行创建,可以使用alter命令修改。前面已经接触过的数据库对象有表、用户等.同义词:就是给数据库对象取一个别名。.序列:oracle中实现增长的对象。.视图:预定义的查询,作为表一样的查询使用,是一张虚拟表.索引:对数据库表中的某些列进行排序,便于提高查询效率。2.同义词:(Synonym)是数据库对象的一个别名,Oracle可以为表、视图、序列、过程、函数、程序包等指定一个别名。同义词有两种类型:.私有同义词:拥有create synonym权限的用户(包括非管理员用户)即可创建私有同义词,创建的私有同义词只能由当前用户使用。.公有同义词:系统

50、管理员可以创建公有同义词,公有同义词可以被所有用户访问。,创建同义词的语法是:create or replace public synonym schema.synonym_name for schema.object_name 语法解析:create or replace表示在创建同义词时,如果该同义词已经存在,那么就用新创建的同义词代替旧同义词。public:创建公有同义词时使用的关键字,一般情况下不需要创建公有同义词。,Oracle中一个用户可以创建表、视图等多种数据库对象,一个用户和该用户下的所有数据库对象的集合称为Schema(中文称为模式或者方案),用户名就是Schema名。一个数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号