模块结构
PSQL代码模块由头和主体两个部分组成.定义它们的DDL语句是复杂的语句;也就是说,由一个语句,包含多条语句块。这些语句以一个动词(CREATE, ALTER, DROP, RECREATE, CREATE OR ALTER)开始,最后以END结束主体语句.
模块头
模块头头提供的模块名称和定义用于主体中的任何参数和变量。存储过程和 PSQL 块可以有输入和输出参数。触发器没有输入或输出参数。
数据库触发器的头表明事件(插入、更新或删除或组合)的阶段操作(该事件BEFORE或AFTER),将导致"触发"。
模块主体
PSQL 的模块主体是一个语句块,以逻辑顺序运行,象一个程序。一个块语句被包含在BEGIN和END语句内。主要的BEGIN...END 块可能包含任意数量的其它BEGIN...END块,包括嵌入式的和顺序的。 除了BEGIN 和 END外所有语句最后由分号(;)结。作为一个PSQL语句的结束符没有其他字符是有效的。
这里我们有点跑题了,解释如何在isql实用程序切换结束的字符,使它能在这种环境中定义PSQL模块同isql本身没有冲突,它使用了相同的字任,分号(;),作它自己的语句结束符。
isql 命令 SET TERM:
作用: 改变结束的字符,避免同PSQL语句中的结束字符相冲突
适用: 仅ISQL
语法:
SET TERM
表 7.1. SET TERM 参数
参数 | 描述 |
new_terminator | 新的结束符 |
old_terminator | 旧的结束符 |
当在isql中编写触发器和存储过程,即在其交互界面或脚本中,运行一个SET TERM语句是需要的,将正常isql语句结束符从分号切换到其它字符或短字符串,以避免同在PSQL中不可改变分号结束符冲突。切换到替代的结束符需要在定义 PSQL 对象或运行脚本之前做。
替代的的结束符可以是除了空格之外的任何字符串,一个撇号或当前字符的结束符字符 [s]。使用任何字母字符 将是区分大小写的。
例子:改变默认的分号为 '^' 且使用它提交一个存储过程定义,字符作为一个替代的结束符:
SET TERM ^;
CREATE OR ALTER PROCEDURE SHIP_ORDER (
PO_NUM CHAR(8))
AS
BEGIN
/* 存储过程主体 */
END^
/* 其它存储过程和触发器 */
SET TERM ;^
/* 其它的 DDL 语句 */