简介
PL/SQL是一种程序语言,是oracle数据库对SQL语言的扩展,我们来复习本实验室的语言的基本特征,并学习如何集成到SQL来帮助解决数据库问题。
对PL/SQL的需要
SQL语句的定义是按照约束条件我们希望确定一个查询的结果。这样的语言通常被称为声明,这与所谓的程序语言的一个程式指定一个列表的操作顺序进行达到期望的结果形成对比,PL/SQL增加了selective (i.e.if…then…else…)和iterative constructs(i.e.loops)到SQL中。
PL/SQL对于写触发器和存储过程很有用。存储过程的单位的程序代码存储在汇编形式的数据库中。
PL/SQL的原理
Pl/sql程序被组织在功能函数,程序和程序包中(有点类似于JAVA包装)。有一个有限的支持面向对象的编程。PL/SQL是基于A大的编程语言,同样,它和pascal共享一些语法。你的第一个PL/SQL例子将是一个匿名的块—这是一个小程序,但既没有命名也没有在数据库中持续的存储。
SQL> SET SERVEROUTPUT ON SQL> BEGIN 2 dbms_output.put_line('Welcome to PL/SQL'); 3 END; 4 /
SET SERVEROUTPUT ON是SQL*plus命令启动控制台输出,你只需要在SQL*Plus对话中输入这些命令。
关键字BEGIN…END定义一个scope和花括号中的相等Java{…}
字符(;)标记一条语句的结束。
Put_lin函数在SQL*Plus控制台中的字符串。
表2涉及到操作清单,表3涉及到一些有用的内嵌函数。
编译你的代码
PL/SQL代码被提交到SQL*Plus中编译。(参见introduction to oracle)。
调试
除了你的程序是一个匿名的块之外,你的错误可能不被报道。反而,SQL*Plus 将显示显示这样的信息:``warning: procedure created with compilation errors''。
随后你将会需要键入:
SQL> SHOW ERRORS
来查看你的错误表。如果你不理解这些错误信息,并且你是在UNIX中用Oracle,你使用oerr utility可以得到更多的详细描述,另外,使用oracle的文档(参见相关参考文件)。比如,如果oracle报道“error PLS—00103”,你应该键入:
Oerr PLS 00103
UNIX的命令提示符(i.e.not in SQL*Plus)。
执行PL/SQL
如果你提交了程序到上面的oracle,你或许应该注意到立即执行。这是匿名程序块的原因,但是不适合程序和函数。最简单的办法来运行函数(e.g.sysdate)是从一个SQL语句中调用:
SQL> SELECT sysdate FROM DUAL 2 /
下面,我们将改写上面程序的匿名块。注意,我们将使用用户功能来问候用户。
CREATE OR REPLACE PROCEDURE welcome IS user_name VARCHAR2(8) := user; BEGIN -- `BEGIN' ex dbms_output.put_line('Welcome to PL/SQL, ' || user_name || '!'); END; /
确保你理解在代码中的改变:
声明type VARCHAR2型变量user_name
User_name使用user2的内建函数初始化
``:=''是赋值运算符(参见.表2)
一旦你已经编译了程序,用EXEC命令执行:
SQL> EXEC welcome
程序和函数使你回想起JAVA的方法。他们之间的异同见表1
Table 1: Functions, procedures and Java methods compared.
Function
Procedure
Java Method
Parameters
input, output
input, output
input
Returns value
yes
no
optional
Can be called within SQL
yes
no