—CONTINU关键字使循环重新开始,即跳过任何在该循环内但在CONTINU关键字之后的语句。
4.6 BREAK和CONTINUE
语法(ASE) 语法WHILE boolean expression BEGIN statement1 statement2 BREAK CONTINU END statement
4.6 BREAK和CONTINUE
举例(ASE) 举例while (select avg(price) from titles) >= $20 begin update titles set price = price / 2 if (select max(price) from titles) < $40 break else if (select avg(price) from titles) < $20 continu print "Average price still over $20" end print "Not too expensive.or Average price under $20"
4.7 WAITFOR
功能WAITFOR 关键字将挂起当前的执行, 直到指定的事件发 生。它常常被系统用来实现有规律的系统维护、出错处理、 事件处理和统计记录等。 部分语法waitfor {delay time | time time |……}
4.7 WAITFOR
举例 这个例子是一个无终止循环,它每隔半小时记录一次锁的个数。while 2>1 /* 这一表达式总是返回'TRUE' */
waitfor delay '0:30:00' /* 每隔30分钟*/ insetrt into num_procs select getdate(), count(*) from master, syslocks
4.8 PRINT
功能PRINT关键字用来在屏幕上显示用户定义的 信息,局部变量的值或char/varchar类型的全 局变量的值。 语法print {"any ascii characters or string" |local_variable | global_variable } [, arg_list ]
4.8 PRINT
举例(1) print "hello" (2) print @msg /* @msg 是一个局部变量。*/ (3) declare @table_name varchor(30) , @user_name varchar(30) select @table_name = "titles", @user_name = "ezekiel" print "The table%1! is not owned by the user %2!",@table_name ,@user_name
5 存储过程中的事务、游标
存储过程中的事务 存储过程中的游标
5.1 嵌套事务
嵌套事务 是指在存储过程中的事务的间接嵌套, 即嵌套事务的形成是因为调用 含有事务的过程。@@trancount 记录了事务嵌套级次。@@trancount在第一个begin tran语句后值为1,以后每遇到一个begin tran 语句,不论是否在嵌套 过程中,@@trancount的值增加1;每遇到 一个commit,@@trancount的值就减少1。若@@trancount的 值 等于 零,表示当前没有事务;若@@trancount的值不等 于零,其值 假定为i,表明当前处于第i 级嵌套事务中。对于嵌套事务,直 到 使用@@trancount 的值为零的那个commit语句被执行,整个 事务才被提交。select @@trancount
举例: 举例:在存储过程中的事务嵌套
5.1.1 与事务相关的语句
Rollback 根据SQL Server的缺省规定,一个不带事务名或保存 点名的rollback tran 语句,不论它是否在嵌套事务中, 总是退到最外 面的begin tran语句,即回退包括所有 嵌套事务在内的整个事务commit 根据SQL Server的缺省规定,即使是在嵌套事务中 执行commit 语 句,@@trancount计数值也只减少1。
5.2 存储过程中的游标
语法create proc procedure_name as SQL_statements containing cursor processing 其中:SQL_statements containing cursor processing 是指包含游标处理的SQL语句。
5.2 存储过程中的游标
举例create proc proc_fetch_book As begin declare @book_title char(30), @book_id char(6) declare biz_book cursor for select title, title_id from titles where type = "business" open biz_book fetch biz_book into @book_title, @book_id ……-- 在这里做某些处理close biz_book deallocate cursor biz_book return end
5.2 存储过程中的游标
游标的作用域 如果存储过程是嵌套的话,那么也包括它的所有子域。 这就是说,如果嵌套的存储过程构成一棵调用树(Call Tree),那么在 这棵 树的某个结点上定义的游标,其作用域就是它位于的树叉,即 自定义游标的那个结点的存储过程及它所包含的所有子域。但是如果 在它所包含的子域中,定义了与它同名的游标,那么它将在定义同名
游标的子域内及该子域所包含的其他子域内失效。
6 ASE存储过程和IQ存储过程常见区别、举例
ASE存储过程和IQ存储过程常见区别 举例
6.1 ASE存储过程和IQ存储过程常见区别
COMMIT ¨C 在IQ存储过程中, 每一个增、 删、 改、 查的上sql 后都要加上一个commit以保证语句成功执行(ASE不用)BEGIN END ¨C ASE的存储过程的每个程序分支要放在BEGIN END中(每个条件判断,每个循环等),而IQ不用,只要在程 序最外边有个BEGIN END 就可以了
6.1 ASE存储过程和IQ存储过程常见区别
ASE存储过程要在存储过程名之后,BEGIN之前加上AS,IQ不 用 变量定义 ¨C ASE DECLARE @ date_begin CHAR(8); IQ DECLARE date_begin CHAR(8);
6.1 ASE存储过程和IQ存储过程常见区别
变量赋值- ASE存储过程中:select @sql_str = 1 ˉIQ存储过程中:select 1' into sql_str 变量引用- ASE存储过程中:@+变量名IQ存储过程中:变量名
6.2 举例
例子ASE存储过程IQ存储过程
|