PL/SQL的基本执行语句包括赋值语句、查询语句、DML语句、RETURN语句、GOTO语句、NULL语句等。
声明变量后,可以通过以下两种方式为其赋值。
(1)使用赋值语句将表达式赋值给变量。
(2)使用SELECT INTO或FETCH语句从table中赋值给变量。
将表达式的值赋给变量,语法声明如下。
SELECT INTO语句的一种简单形式如下。
需要注意的是,变量和值必须具有兼容的数据类型。如果一种数据类型可以隐式转换为另一种数据类型,那么它与另一种数据类型必须兼容。
查询语句(SELECT)是从一个或更多表中返回记录行。与标准的SELECT语句不同,在PL/SQL程序中,SELECT语句需要与INTO或BULK COLLECT INTO短语结合使用,将查询结果保存到变量中。针对单条和多条记录的查询有以下两种方式。
(1)SELECT INTO:单条记录的查询。
(2)SELECT BULK COLLECT INTO:多条记录的查询。
INTO句子后的变量用于接收查询的结果,变量的个数、顺序应该与查询的目标数据相匹配,也可以是记录类型的变量。
PL/SQL中的DML语句对标准SQL语句中的DML语句(如INSERT、UPDATE、DELETE、MERGE)进行扩展,允许使用变量。有关语法请参阅金仓在线帮助文档。
RETURN语句用于立即结束子程序或包含它的匿名块的执行。
在函数中,RETURN语句将指定的值分配给函数标识符,并将控制权返回给调用者,调用者调用后立即恢复执行(可能在调用语句内)。函数中的每个执行路径都必须指向一个RETURN语句,否则PL/SQL运行时会报错。
在过程中,RETURN语句将控制权返回给调用者,调用后立即恢复执行。在匿名块中,RETURN语句退出它自己的块和所有封闭块。
一个子程序或匿名块可以包含多个RETURN语句。
GOTO语句无条件地将控制跳转到标签。标签在其范围内必须是唯一的,并且必须位于可执行语句或PL/SQL块之前。运行时,GOTO语句将控制跳转到带标签的语句或块。
需要谨慎使用GOTO语句,过度使用它们将导致代码难以理解和维护。不要使用GOTO语句将控制从深度嵌套的结构跳转到异常处理程序,这将引发异常。有关PL/SQL异常处理机制的信息,请参阅PL/SQL异常处理。
对GOTO声明的限制如下。
(1)如果GOTO语句过早退出FOR LOOP语句,游标将关闭。
(2)GOTO语句不能将控制转移到IF语句、CASE语句、LOOP语句或子块中。
(3)GOTO语句不能将控制从一个IF语句子句转移到另一个语句,或者从一个CASE语句转移到另一个语句。
(4)GOTO语句不能将控制转移出子程序。
(5)GOTO语句不能将控制转移到异常处理程序中。
(6)GOTO语句不能将控制从异常处理程序转移到当前块中(但它可以将控制从异常处理程序转移到封闭块中)。
语法格式如下。
NULL语句只将控制权传递给下一条语句,一些语言将这样的指令称为无操作。
NULL语句的用途包括如下几项。
(1)为GOTO语句提供目标。
(2)通过明确条件语句的含义和动作来提高可读性。
(3)创建占位符和存根子程序。
(4)表明开发人员意识到某种可能性,但无须采取任何行动。
示例2.6: 综合性示例。
功能描述: 根据id判断记录是否存在,如果存在,则添加,否则更新相关记录;删除记录时应该先判断是否存在。
程序代码如下。
程序运行结果如下。