CHECK TABLE
REPAIR INFO OUTPUT LOAD UNLOAD CREATE PROCEDURE CREATE PROCEDURE FROM
document子句对存储过程做一些说明,可省略。
WITH LISTING IN 选项说明接受编译器输出信息的文件名,如省略, 则编译器不产生输出。
向存储过程中传递变量
create procedure procname(var_num integer default null) delete from proctable where colno=var_num; end procedure;
execute procedure procname(11); return语句
从存储过程中返回0个或多个值
RETURN 语句说明的返回值的个数和类型必须与创建存储过程时说明的返回值的个数和类型一致,或者不返回任何值,在后一情形下,所有的返 回值为空值。
WITH RESUME子句将保证存储过程继续执行,所有的变量均保持原有的值。该子句用于返回多组值,比如循环语句中。 create procedure proc_new() returning int,int; define num1;
define num2; ..... ....
return num1,num2; end procedure; 从SQL中调用存储过程 select * from users
where number=proc_new(23); call语句
从一个存储过程中调用另一个存储过程 两种格式:
CALL 过程名(参数, ...) RETURNING 变量,...; CALL 过程名(参数名=参数, ...) RETURNING 变量,...; 说明:
参数可以是SPL表达式或是SELECT语句,只要该语句返回单值,并且具有适当的类型和长度。
如果参数个数多于被调用的存储过程的参数,则返回错误。
如果参数个数少于被调用的存储过程的参数,则未说明的参数被初始化为其缺省值(该值在创建存储过程时说明)若无缺省值, 则返回错误。
RETURNING 子句说明的变量用于接收被调用存储过程的返回值,如无返回值, 则可省略。 例如:
define var_no1 int;
三、存储过程语言 变量 局部变量
仅在本存储过程中有效的变量。 局部变量不允许有缺省值 全局变量
在同一用户活动期间, 存储过程中的可被同一数据库的其它存储过程访问的的变量。全局变量必须在所有使用的存储过程中定义,并且必须给 出缺省值,实际的缺省值是第一次被访问时定义的缺省值。 变量(局部变量)的范围
变量在语句块内有效, 如语句块嵌套,则同名的内层定义覆盖其外层定义, 内层语句执行完后,外层定义重新有效。 存储过程表达式
存储过程表达式可以是除聚集函数表达式外的任何SQL算术表达式 例子: var_value1; var_value1 var_value2; 变量定义
用DEFINE 语句定义变量,其类型可以是除SERIAL数据类型外 的所有SQL 数据类型 定义TEXT 或BYTE 类型变量时, 需在其变量前加关键字REFERENCES, 以表明该变量并不含有真正的数据, 而只是指向数据的指针。 可以使用LIKE定义与字段类型一致的数据类型
传入参数变量的定义在create procedure procname(var_value int)定义 例子: DEFINE i,j INT;
DEFINE name VARCHAR(12);
DEFINE time_stamp DATETIME YEAR TO SECOND DEFAULT CURRENT YEAR TO SCECOND;
DEFINE date_value DATE; DEFINE txt REFERENCES TEXT; DEFINE by REFERENCES BYTE;
DEFINE p_customer like users.customer_num; 定义全局变量
define global global_var int default 0; 局部BLOB数据类型 只使用描述符: LET DEFINE CALL SELECT
存取BLOB数据: INSERT UPDATE
RETURN(到前端应用程序) 变量赋值 四种方式 1、利用LET 语句 LET i, j=1, 0;
LET var_name, var_num=(SELECT username, usernum FROM users WHERE usernum=100);
2、利用SELECT 或SELECT ... INTO 语句
SELECT username INTO var_name FROM users WHERE usernum=100; 3、利用CALL 语句
call proc_new(22) returning var_no1; 4、利用EXECUTE PROCEDURE ...INTO 语句
execute procedure proc_name(username,address into p_name,p_addr); 语句块
create procedure pro_test() returning int; begin define i int; let i=1; end
--begin,end 语句块(显示) retrun i;
--returning,return语句块(隐含) end procedure; foreach循环
create procedure pro_foreach() define id int;