- 论坛徽章:
- 0
|
sql stored procedure返回结果集的操作步骤:
1)declare cursor:
如:
declare clientcur cursor with return to caller for select * from staff;
2)open the cursor:如 open clientcur;
3)不关闭游标退出stored procedure
开发:
最后终于来到了真正的开发了,刚才讲到sql procedure是由sql,sql pl写的,sql就没什么好说的了。关键说说sql pl (procedural language)
功能:控制逻辑流向,声明和设置变量,处理警告和异常。可用于例程(routine),触发器,动态复合语句(单个调用中的sql语句块)
控制语句:declare,set,for,get diagnostics,if,iterate,leave,return,signal,while
sql pl不能执行的sql:table,index,view的create和drop
begin atomic 开头,end 结尾
declare :定义变量 和 定义出错处理
declare sql-var-name data-type default default-values declare condition-name condition for sqlstate value...
这里的condition一般做“异常”解释
set:声明变量 和 给触发器定义中的表中的列赋值
set pay = select salary from employee where empno = 5;//仅返回一个值
set pay = null;//空值
set pay = default;//变量定义的默认值
//专用寄存器的内容
set useriduserid = userid; set today = current date;
//同时给多个变量赋值
set pay =10000,bonus = 1500; set (pay,bonus) = (10000,1500); set (pay,bonus) = select (pay,bonus) from employee where empno = 5; >>if/then/else
三种形式:
1) if then/end if 语句块
2) if then/else/end if
3) if then/elseif /else/end if
可以在if/then/else 语句中使用sql运算符,如:
if (salary between 10000 and 90000) then... if (deptno in ('a00','b01')) then.. if (exist (select * from employee)) then... if (select count(*) from employee)>0) then.. >>while label: while condition do ...sql pl .. end while lable;
label可选
>>for:用于循环select返回结果集的行
格式:
label: for row_label as select satement do ..sql pl..
end for label;//label可选
例子:
for emp as select * from employee where bonus >1000 do set total_bonustotal_bonus = total_bonus +emp.bonus; end for;
>>iterate:用来回到for或者while循环的开始重新执行
check_bonus: for emp as select * from employee do if(emp.bonus>10000) then set total_bonustotal_bonus = total_bonus +emp.bonus; else iterate check_bonus; end if; end for check_bonus;
>>leave:相当于java中的break,需要一个label
>>signal:对出现异常的应用程序报警
signal sqlstate value set message_text = '...';//自定义一个sqlstate,7、8、9和I~Z开头的sqlstate
signal condition set message_text = '...';//自定义异常condition
>>get diagnostics:用在sql pl触发器或语句块(不是函数)内,返回update,insert,delete语句影响的记录数。
get diagnostics variable = row_count; |
|