#PLSQL语句
YashanDB定义了一系列PL/SQL语句,按照这些语句指定的格式进行编程,并由YashanDB内置编译器进行编译,生成可运行的PL/SQL对象,如存储过程、函数等,满足在数据库层面实现各类复杂的业务逻辑。
# PL/SQL中的表达式
过程体的各个地方都可能使用到表达式,例如存储过程/函数等的实参、变量赋值、SQL语句等,这些表达式在使用时均遵循YashanDB的通用表达式语法及规则,同时增加了如下一些限制:
- 表达式作为列字段时,不能使用*代表所有列字段。
- 表达式中不能使用窗口函数。
- 非SELECT的DML语句中的表达式不能使用ROWNUM、ROWID、ROWSCN等伪列,不能使用聚集函数。
# PL/SQL中的静态SQL语句
在PL/SQL中可编写如下SQL语句:
这些SQL语句与非过程体中的普通SQL语句语法一致,但存在如下约束:
- 在SQL语句中出现的标识符与过程体的变量同名时,将优先使用过程体的变量名称,系统将该标识符替换为绑定参数占位符
:Bi
。 - 编写SELECT语句必须有INTO子句,且select_list的个数必须INTO子句变量或RECORD成员相对应。
- COMMIT/ROLLBACK只能使用缺省的COMMIT/ROLLBACK语法,不能为其指定任何选项。
- 静态SQL语句中不能包含CTE(Common Table Expression)。
# PL/SQL中的动态SQL语句
在PL/SQL中可以通过[EXECUTE Statement][./EXECUTE Statement]执行动态SQL语句。
这些SQL语句与非过程体中的普通SQL语句语法一致,但存在如下约束:
- 动态SQL语句中每个绑定变量的占位符,都需要有对应的变量在USING子句。
- 对于动态SQL中的SELECT语句,如查询结果为一行数据,SQL中必须要有INTO子句;如查询结果为多行数据,SQL中必须要有BULK COLLECTION INTO子句。
- 对于动态SQL中的匿名块,除存储过程、函数、游标等需要输入的参数外,匿名块的其他地方不能出现占位符(绑定参数)。