1、什么是PL/SQL,PL/SQL的语法格式是什么?源码见“参考文献”
答:PL/SQL是一种过程化语言,在PL/SQL中可以通过IF语句或者LOOP语句实现控制程序的执行流程,甚至可以定义变量,以便在语句之间传递数据信息,这样PL/SQL语言就可以实现操控程序处理的细节过程。
整个PL/SQL块分为三部分:声明部分(用declare开头),执行部分(用BEGIN开头以END结尾),异常处理部分(以EXCEPTION开头)。语法格式如下:
[DECLARE]
--声明部分,可选
BEGIN
--执行部分,必须
[EXCEPTION]
--异常处理部分,可选
END
示例是一个存储过程。
2、PL/SQL语言如何进行注释?
答:单行注释:单行注释由连个连接字符“--”开始,后面紧跟着注释内容。
多行注释:多行注释由/*开头,由*/结尾,这个大多数编程语言是相同的。
PL/SQL字符集
所有的PL/SQL程序元素(比如,关键字、变量名、常量名等)都是由一些字符序列组合而成的,而这些字符序列中的字符都必须取自PL/SQL语言所允许使用的字符集,那么这些合法的字符集主要包括以下内容:
大写和小写字母:A-Z或a-z。
数字:0-9。
非显示的字符:制表符、空格和回车。
数学符号:+,-,*,/,>,<,=等。
间隔符:包括(),{},[],?,!,;,:,@,#,%,$,&等。
3、数值类型有哪些,如何定义变量
数据类型实际上是一种用于描述数据存储的内存结构,用它来决定变量中所存储数据的类型。
1).数值类型
数值类型主要包括NUMBER、PLS_INTEGER和BINARY_INTEGER三种基本类型
2).字符类型
字符类型主要包括VARCHAR2、CHAR、LONG、NCHAR和NVARCHAR2等。这些类型的变量用来存储字符串或字符数据。
注意:VARCHAR2存储32767个字节的数据,而char存储2000个字节
3).日期类型
日期类型只有一个种——即DATE类型,用来存储日期和时间信息,DATE类型的存储空间是7个字节,分别使用一个字节存储世纪、年、月、天、小时、分钟和秒。DATE类型的存储空间只有7个字节。
4).布尔类型
布尔类型也只有一种——即BOOLEAN,主要用于程序的流程控制和业务逻辑判断,其变量值可以是TRUE、FALSE或NULL中的一种。
以下为特殊字符类型:
5).%TYPE类型
使用%TYPE关键字可以声明一个与指定列名称相同的数据类型,它通常紧跟在指定列名的后面。
示例:
declare
number_salemp.sal%type;
var_name emp.ename%type;
6).RECORD类型,单词record有“记录”之意,因此record类型也称为“记录类型”,使用该类型变量可以存储由多个列值组成的一行数据,其语法如下:
type record_type is record
(
var_member1 data_type [not null] [:=default_value],
…
var_membern data_type [not null] [:=default_value])
7).%ROWTYPE类型,%rowtype类型的变量结合了%type类型和record类型变量的优点,它可以根据数据表中行的结构定义一种特殊的数据类型,用来存储从数据表中检索到的一行数据。语法如下:
rowVar_name table_name%rowtype;、
8) 定量和常量
var_countryName varchar2(100):='中国'; --变量,初始化值为‘中国’
var_day constantinteger :=365; --常量,关键字为constant
4、流程控制语句有哪些?并举例说明。
答:
选择语句其语法为:
1).if…then语句
2).If…then…else语句
3).if…then…elsif语句
4).case语句
循环语句其语法为:
1.loop语句
loop
plsql_sentence;
exit when end_condition_ exp
end loop;
2.while语句
while condition_expression loop
plsql_sentence;
end loop;
3.for语句
for variable_ counter_name in [reverse]lower_limit..upper_limit loop
plsql_sentence;
end loop;
5、PL/SQL游标是什么?有什么用?如何使用?并举例说明
答:游标提供了一种从表中检索数据并进行操作的灵活手段,游标主要用在服务器上,处理由客户端发给服务器端的SQL语句,或是批处理、存储过程、触发器的数据处理请求。游标的作用相当于指针,通过游标PL/SQL程序可以一次处理查询结果集中的一行,并可以对该数据执行特定操作,从而为用户在处理数据的过程中提供很大的方便。通过游标操作数据主要使用的是显性游标和隐形游标。
a) 显示游标是由用户声明和操作的一种游标,通常用于操作查询结果集(即由SELECT语句返回的查询结果),使用它处理数据的步骤包括:声明游标、打开游标、读取游标和关闭游标4个步骤。
无论是显式游标还是隐式游标,都具有%found、%notfound、%isopen和%rowcount四个属性,通过这4个属性可以获知SQL语句的执行结果以及该游标的状态信息。下面对这4个属性的功能进行讲解。
(1)%found:布尔型属性,如果SQL语句至少影响到一行数据,则该属性为true,否则为fasle。
(2)%notfound:布尔型属性,与%found属性的功能相反。
(3)%rowcount:数字型属性,返回受SQL语句影响的行数。
(4)%isopen:布尔型属性,当游标已经打开时返回true,游标关闭时则为false。
--下面这个例子用于联系游标的使用,其中还包括record类型和%type类型的示例
declare
cursor cursor_emp (var_jobinvarchar2:='SALESMAN')
isselecte.empno,e.ename,e.jobfrom emp e where e.job=var_job;
type record_empisrecord
(
var_empno emp.empno%type,
var_empname emp.ename%type,
var_job emp.job%type
);
emp_rows record_emp;
begin
open cursor_emp('MANAGER');
fetch cursor_empintoemp_rows;
while cursor_emp%foundloop
dbms_output.put_line('员工名字'||emp_rows.var_empname||'员工职位:'||emp_rows.var_job);
fetch cursor_empintoemp_rows;
endloop;
close cursor_emp;
end;
/
隐式游标:在执行一个SQL语句时,Oracle会自动创建一个隐式游标。这个游标是内存中处理该语句的工作区域。隐式游标主要是处理数据操纵语句(如,UPDATE、DELETE语句)的执行结果,当然特殊情况下,也可以处理SELECT语句的查询结果。由于隐式游标也有属性,当使用隐式游标的属性时,需要在属性前面加上隐式游标的默认名称——SQL。
--该示例用于隐式游标的测试
declare
begin
update emp eset e.mgr=9527where e.empno=9527;
ifsql%notfoundthen
dbms_output.put_line('更新失败!');
else
dbms_output.put_line('更新成功!');
endif;
end;
/
通过for语句循环游标:
1)在for语句中遍历隐式游标中的数据时,通常在关键字‘IN’的后面提供由select语句检索的结果集,在检索结果集的过程中,Oracle系统会自动提供一个隐式的游标SQL;
begin
for emp_record in (selecte.empno,e.ename,e.job from emp e where e.deptno=30)
loop
dbms_output.put_line('员工名字'||emp_record.empno||'员工职位:'||emp_record.job);
end loop;
end;
/
declare
cursor cur_temp is
select * from emp e where e.deptno=30;
begin
for emp_record in cur_temp
loop
dbms_output.put_line('员工名字'||emp_record.ename||'员工职位:'||emp_record.job);
end loop;
end;
/
6、异常处理
答:当PL/SQL程序违反了Oracle系统内部规定的设计规范时,就会自动引发一个预定义的异常,例如,当除数为零时,就会引发“ZERO_DIVIED”异常。
自定义异常:
1.错误编号异常
错误号异常是指在Oracle系统发生错误时,系统会显示错误号和相关描述信息的异常,虽然直接使用错误编号也可以完成异常处理,但错误编号较为抽象,不易于用户理解和记忆,对于这种异常,首先在PL/SQL块的声明部分(DECLARE部分)使用EXCEPTION类型定义一个异常变量名,然后使用语句PRAGMAEXCEPTION_INIT为“错误编号”关联“这个异常变量名”,接下来就可以像对待系统预定义异常一样处理了。
2.业务逻辑异常
在实际的应用中,程序开发人员可以根据具体的业务罗规则自定义一个异常。这样,当用户操作违反业务逻辑规则时,就引发一个自定义异常,从而中断程序的正常执行并转到自定义的异常处理部分。
参考文献:
1、《Oracle从入门到精通》 明日科技著。
2、源码资料:
3、PPT资料: