存储过程
一、举例说明用法:利用前面定义基表,定义学生退学处理过程。
EXEC SQL
CREATE PROCEDURE drop-student /PROCEDURE过程
(IN student-no CHAR(6), /输入参数
OUT message CHAR(30)) /输出参数,这无分号。。。
BEGIN ATOMIC /ATOMIC原子的,加原子的是一样事物
DELETE FROM STUDENT /下面的语句必须全部成功的执行,
WHERE SNO=student-no; /不能执行就都不执行。用影子存储做的
DELETE FROM SC /可以前恢复
WHERE SNO=student-no;
SET message=student-no||‘dropped’; /||为连接上
END;
EXEC SQL
/*以下为宿主语句程序*/
CALL drop-student(...);
~~drop-student过程名,它有:
输入(IN)参数:
student-no,退学人学号。
输出OUT参数:message,返用户信息。
~~BEGIN....END:过程体。
~~ATOMIC声明该过程保持原子性。(由DBMS负责)。三语句要执行必须均执行。不执行都不执行。
~~执行了部分语句,后继语句执行失败,应恢复。
~~不加ATOMIC则允许部分语句执行,部分语句执行失败。
~~SQL-92/PSM标准中,除过程外,还可以定义函数,函数可用于表达式中。
~~过程和函数均可说明局部变量。
~~与嵌入式SQL一样,可通过SQLSTATE或SQLCODE返回执行情况。
~~可以使用游标向应用程序传递结果。
~~函数或过程中,可使用:
CASE,WHILE,IF...THEN...ELSE等语句。
也可以调用主语言编写的例程。
3.6、QBE-Language
~~基于域演算的语言
~~QBE---Query by Example(举例查询语言)
~~美国IBM公司约克镇高级研究实验室为图形终端设计的一种域演算语言。
~~直观(表可以显示在屏幕上)、二维文法