PL/S来自QL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Or值读油苗acle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单360百科元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。
- 中文名称 PL/SQL
- 外文名称 Procedural Language/SQL
- 应用领域 数据库
- 具体 集成开发环境
- 类型 过程化SQL语言
语言简介
PL/SQL(Procedural Language/SQL)是一种过输据注征程化语言,属于第三代语言,它与C、C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言。在甲骨文数据库管理方面,PL/SQL是对结构化查询语言(SQL)的过程语言扩展。PL/SQL的目的是联合数据库语言和过程语省饭粉民气言。PL/SQL的基本单位叫做块,由三个部分组成:一个声明部分,一个执行部分和异常处理部分。
因为PL/SQL允许混合SQL声明和过程结构,因此可以在将声明发送到甲骨文系统去执行之前使用PL/SQL区段和副程序来组合SQ就命轻缩L声明,没有PL/SQL,甲骨文需要就每加蛋诗绍真次处理SQL声明,在网深络环境中,这将影响交通流量,而且增加响应时间。PL/SQL区段只被编译一次并且以可运行的形式储存,以降低响应时间。
语言背景
结构化查询语言(Structu来自red Query Lan360百科guage,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特换宗列溶干点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得结果即可。显然,这种不关注任何实现细节的语言对于开发者来说有着极大的便利。然而,有些复杂的业务流程要求相应的程序来描述,这种情况下4GL就有些无能为力了。PL/SQL的出现正是为了解决这一问题,它是一种过程化青货握深血苏语言,属于第三代语言,它与C、 C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。
编程足别报织均基础
程序结构
PL/S来自QL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以 begin开头)和异常处理部分(以exception开头)。其中执行部分是必须的,其他两个部分可选。无论PL/SQL程序段的代码量有多大,其基本结构就是由这三部分组成。
模板如下:
decl360百科are
/* 声明区(可选):定义类型和变量、声明资慢鸡变量、声明函数、游标 */
b父办克元积音egin
/* 执行区(必须的):执行pl/sql语句或者sql语句 */
exception
/* 异常处理区(可选):处理错误的 */
end;
如下所示为一段完整友社讨设何宽染配促的PL/SQL块:
/*声明部分,以decla配普还挥教部改反理re开头*/
declare v_id integer;
v_name 鸡青是varchar(20);
cursor c_emp is select * from employee where emp_id=3;
/*执行部分,以begin开头*/
begin open c_emp; //打开游标
loop
fet化ch c_emp into v_id,v_name; //从游标取数据
exit when 烧置倒转千征章染c_emp%notfound ;
end loop ;
close c_emp; //关闭游标
dbms_output.PUT_LINE专威者务(v_name);
/*孙富规组异常处理部分,以exception开始*/
exception
when no_data_found then
后雷促球振回次缺dbms_output整态余.PUT_LIN顶E('没有数据');
end ;
控制结构
PL/SQL程序段中有三种程谈福剂式固序结构:条件结构、循环结构和顺序结构。
1) 条件结项小任构
与其它语言完全类似,语法结构如下:
if condition then
statement1
else
statem斯ent2
end if ;
2)循环结构
这一结构与其他语言不太一样,在PL/SQL程刚功适表序中有三种循环结构:
a胡科沉突跳. loop … end loop;
b. while condition loop … end loop;
c. for variable in low_bound . .upper_bound loop … end loop;
其中的"…"代表循环体。
3)顺序结构
实际就是goto的运用,不过从程序控制的角度来看,尽量少用goto可以使得程序结构更加的清晰。
变量声明与赋值
PL/SQL主要用于数据库编程,所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的,大体分为数字型、布尔型、字符型和日期型。这里简单介绍两种常用数据类型:number、varchar2。
number
用来存储整数和浮点数。范围为1e130~10e125,其使用语法为:
number[(precision, scale)]
其中(precision, scale)是可选的,precision表示所有数字的个数,scale表示小数点右边数字的个数。
varchar2
用来存储变长的字符串,其使用语法为:
varchar2[(size)]
其中size为可选,表示该字符串所能存储的最大长度。
在PL/SQL中声明变量与其他语言不太一样,它采用从右往左的方式声明,比如声明一个number类型的变量v_id,那其形式应为:
v_id number;
如果给上面的v_id变量赋值,不能用"=",应该用":=",即形式为:
v_id :=5;
基本命令
PL/SQL使用的数据库操作语言还是基于SQL的,所以熟悉SQL是进行PL/SQL编程的基础。SQL语言的分类情况大致如下:
1.数据定义语言(DDL),包括CREATE(创建)命令、ALTER(修改)命令、DROP(删除)命令等。
2. 数据操纵语言(DML),包括INSERT(插入)命令、UPDATE(更新)命令、DELETE(删除)命令、SELECT …FOR UPDATE(查询)等。
3. 数据查询语言(DQL),包括基本查询语句、Order By子句、Group By子句等。
4. 事务控制语言(TCL),包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
5. 数据控制语言(DCL),GRANT(授权)命令、REVOKE(撤销)命令。
具体的语法结构可以参阅其他关于SQL语言的资料,这里不再赘述。
过程与函数
PL/SQL中的过程和函数与其他语言的过程和函数一样,都是为了执行一定的任务而组合在一起的语句。过程无返回值,函数有返回值。其语法结构为:
过程:Create or replace procedure procname(参数列表) as PL/SQL语句块
函数:Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块
为便于理解,举例如下:
问题:假设有一张表t1,有f1和f2两个字段,f1为number类型,f2为varchar2类型,要往t1里写两条记录,内容自定。
Create or replace procedure test_procedure as
V_f11 number :=1; /*声明变量并赋初值*/
V_f12 number :=2;
V_f21 varchar2(20) :='first';
V_f22 varchar2(20) :='second';
Begin
Insert into t1 values (V_f11, V_f21);
Insert into t1 values (V_f12, V_f22);
End test_procedure; /*test_procedure可以省略*/
至此,test_procedure存储过程已经完成,经过编译后就可以在其他PL/SQL块或者过程中调用了。函数与过程具有很大的相似性,此处不再详述。
游标介绍
游标的定义为:用游标来指代一个DML SQL操作返回的结果集。即当一个对数据库的查询操作返回一组结果集时,用游标来标注这组结果集,以后通过对游标的操作来获取结果集中的数据信息。这里特别提出游标的概念,是因为它在PL/SQL的编程中非常的重要。定义游标的语法结构如下:
cursor cursor_name is SQL语句;
在本文第一段代码中有一句话如下:
cursor c_emp is select * from employee where emp_id=3;
其含义是定义一个游标c_emp,代表employee表中所有emp_id字段为3的结果集。当需要操作该结果集时,必须完成三步:打开游标、使用fetch语句将游标里的数据取出、关闭游标。
游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。
为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。
显式游标
显示游标被用于处理返回多行数据的SELECT 语句,游标名通过CURSOR….IS 语句显示地赋给SELECT 语句。
在PL/SQL中处理显示游标所必需的四个步骤:
1)声明游标;CURSOR cursor_name IS select_statement
2)为查询打开游标;OPEN cursor_name
3)取得结果放入PL/SQL变量中;
FETCH cursor_name INTO list_of_variables;
FETCH cursor_name INTO PL/SQL_record;
4)关闭游标。CLOSE cursor_name
注意:在声明游标时,select_statement不能包含INTO子句。当使用显示游标时,INTO子句是FETCH语句的一部分。
隐式游标
所有的隐式游标都被假设为只返回一条记录。
使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。
例如:
SELECT studentNo,studentName
INTO curStudentNo,curStudentName
FROM StudentRecord
WHERE name='gg';
上述游标自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL变量curStudentNo,curStudentName中已经有了值。