存储过程
更新时间:2024-07-01 14:39:46
概述
本章介绍了存储过程语言 —— SPL,SPL 是一种高效,面向过程的编程语言。用来为 AntDB 编写用户自定义的存储过程,函数,触发器和包。
下面是 SPL 语言提供的一些对于开发应用程序有用的特性:
作为 SQL 语言的补充,SPL 增加完全面向过程的编程功能特性。
为 AntDB 提供了一种单一通用的编程语言来创建存储过程,函数,触发器和包。
提升了代码的复用率。
容易使用。
本章首先介绍了 SPL 程序的基本组成部分,然后提供了关于 SPL 程序的结构以及如何创建过程或者函数的概要。关于如何利用 SPL 创建触发器的内容与本章的内容不同,需要一个单独的章节进行讨论。
在本章的其它章节中深入研究了 SPL 语言的细节并提供了相关应用程序的示例。
SPL 的基本组成部分
本节讨论了开发一个 SPL 程序所需要最基本的组成部分。
字符集
SPL 程序使用到下面这些字符:
大写字母 A 到 Z, 小写字母 a 到 z。
数字 0 到 9。
符号 ( ) + - * / < > = ! ~ ^ ; : . ' @ % , " # $ & _ | { } ? [ ]。
Tab 键,空格字符和回车键。
SPL 语言所包含的标识符,表达式,语句,控制流程结构使用上面这些字符组成的。
注意:SPL 程序可以操作的数据是由数据库编码所支持的字符集决定。
大小写区分
从下面这个示例中可以看到:在SPL程序中使用的关键字和用户定义的标识符是不区分大小写的。
示例:
DBMS_OUTPUT.PUT_LINE('Hello World'); 可以等同于下面这些语句:
dbms_output.put_line('Hello World');
Dbms_Output.Put_Line('Hello World');
DBMS_output.Put_line('Hello World');
但是,字符和字符串常量以及任何从 AntDB 数据库或外部数据源所取得数据是区分大小写的。
语句DBMS_OUTPUT.PUT_LINE('Hello World!');产生了如下的输出:
Hello World!
但是语句 DBMS_OUTPUT.PUT_LINE('HELLO WORLD!'); 的输出着这样的:
HELLO WORLD!
标识符
标识符是用户定义的名称,用来标识组成SPL程序的各个部分,包括变量、游标、标签、程序和参数。
在 SPL 中有效标识符的语法规则与在 SQL 语言中的规则是一样的,具体请参见在章节 2.1.2 中关于 SQL 语句标识符的讨论。
一个标识符不能定义为与 SPL 语言和 SQL 语言中关键字相同名字。
下面这些示例是一些正确定义的标识符:
x
last___name
a_$_Sign
Many$$$$$$$$signs_____
THIS_IS_AN_EXTREMELY_LONG_NAME
A1
限定词
限定词是一个指定对象的所有者或者是使用这个对象时所在环境的名称。所谓对象就是属于限定词实体的名称。通常来说,一个限定词拥有的实体就是一个限定词后面跟随一个'.',后面再跟着这个限定词所拥有对象的名称。要注意的是'.'的前后都没有空格。
语法:
qualifier. [ qualifier. ]... object
qualifier 是对象的所有者,object 就是属于限定词的实体的名称。有一种情况是前一个限定词所拥有的实体,会被这个实体之后限定词和对象标识为限定词。
几乎所有的标识符都可以被限定。一个标识符是否可以被限定取决于标识符所表示的含义和使用这个标识符的环境。
下面是一些限定词的示例:
由存储过程和函数所属的模式来限定的名称 -例如,schema_name.procedure_name(...)
由触发器所属的模式来限定的名称 - 例如,schema_name.trigger_name
由列所属的数据表来限定的列名 - 例如,emp.empno
由数据表和模式所限定的列名 - 例如,public.emp.empno
一条通用的规则是,无论在一个 SPL 语句语法中的任何地方出现名称,它的被限定名称也都会被用到。
通常来说当像名称相同且属于两个不同的模式的两个存储过程在一个程序中被调用,或者在一个程序中 SPL 变量和一个数据表的列相同等这样的标识符命名冲突的情况出现时,会用到被限定的名称。
在实际应用中建议应该尽量避免使用限定词。在本章中,可以使用下面这些书写约定来避免命名冲突:
在 SPL 程序声明的所有的变量以 v_ 的前缀开头 - 例如, v_empno
在存储过程过程或者函数中定义的参数以 p_ 的前缀开头 - 例如,p_empno
列名和表名不用特定的前缀开头 - 例如,在数据表 emp 中的列名 empno
常量
在 SPL 程序中可以使用常量(或称为直接变量)表示不同数据类型的值。例如 - 数值,字符串,日期等。常量一般可以是下面这些类型:
数值(包括整型和实数型)
字符和字符串
日期/时间




