




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、sql 循环语句的写法SQL 循环语句 declare i int set i=1 while i<30 begin insert into test (userid) values(i) set i=i+1 end while 条件begin 执行操作 set i=i+1 end WHILE 设置重复执行 SQL 语句或语句块的条件。只要指定的条件 为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 语法 WHILE Boolean_expression sql_statement | statement_block
2、BREAK sql_statement | statement_block CONTINUE 参数Boolean_expression 返回 TRUE 或 FALSE 的表达式。 如果 布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来。 sql_statement | statement_block Transact-SQL 语句或用语句块定义的语句分组。 若要定义语 句块,请使用控制流关键字 BEGIN 和 END 。 BREAK 导 致从最内层的 WHILE 循环中退出。 将执行出现在 END 关 键字后面的任何语句, END 关键字为循环结束标记。 CONT
3、INUE 使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句。 注释 如果嵌套了两个或多个 WHILE 循环,内层的 BREAK 将 导致退出到下一个外层循环。首先运行内层循环结束之后的 所有语句,然后下一个外层循环重新开始执行。 示例 A. 在嵌套的 IF.ELSE 和 WHILE 中使用 BREAK 和 CONTINUE 在下例中,如果平均价格少于 $30, WHILE 循环就将价格 加倍,然后选择最高价。 如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍 直到最高价格超过 $50,然后退出 WHILE 循环并打印一条
4、 消息。 USE pubsGOWHILE (SELECT A VG(price) FROM titles) < $30BEGINUPDATE titlesSET price = price * 2SELECT MAX(price) FROM titlesIF (SELECT MAX(price) FROM titles) > $50BREAKELSECONTINUEENDPRINT Too much for the market to bear B. 在带有游标的过 程中使用 WHILE以下的 WHILE 结构是名为 count_all_rows 过程中的一部 分。下例中,该 WH
5、ILE 结构测试用于游标的函数 FETCH_STATUS 的返回值。 因为 FETCH_STATUS 可能返回-2、-1或0,所以,所有的情况都应进行测试。 如果某一行在开始执行此存储过程以后从游标结果中删除, 将跳过该行。成功提取 (0) 后将执行 BEGIN.END 循环内 部的 SELECT 语句。 USE pubs DECLARE tnames_cursor CURSORFORSELECT TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESOPEN tnames_cursorDECLARE tablename sysname-SET tablename =
6、 authorsFETCH NEXT FROM tnames_cursor INTO tablenameWHILE (FETCH_STATUS <> -1)BEGINIF (FETCH_STATUS <> -2)BEGINSELECT tablename = RTRIM(tablename)EXEC (SELECT + tablename + = count(*) FROM + tablename )PRINT ENDFETCH NEXT FROM tnames_cursor INTO tablename ENDCLOSE tnames_cursorDEALLOCATE
7、 tnames_cursorC.延伸:-定义变量:declare A1 INT,A2 INT,A3 INT-定义游标DECLARE my_Cur CURSOR FORSELECT A1,A2,A3 FROM A-打开游标OPEN my_Cur-游标滚到下一行FETCH NEXT FROM my_Cur INTO A1,A2,A3-循环直到游标逐行读取完数据WHILE FETCH_STATUS = 0BEGIN/*-这里做你想做的事情-请问print A1+A2+A3-怎么实现,谢谢*/-游标滚到下一行FETCH NEXT FROM my_Cur INTO A1,A2,A3 END-关闭游标CL
8、OSE my_Cur-释放资源DEALLOCATE my_Cur 如何在 SQL 中使用循环结构解答 FOR,LOOP,WHILE,REPEAT 是 UDB/400 的一种内部循 环控制,用于遍历表中符合条件的每一行记录。例如:目的:更新 employee 库,把所有北京籍员工的工资提高 10% 例一:使用 FOR 循环CREATE PROCEDURE QGPL/TEST_FORLANGUAGE SQLBEGINFOR each_record AS-cur01 CURSOR FORSELECT * FROM code,salary,city from employee where city=B
9、eijingDOUPDATE employeeSET salary=salary * 1.1WHERE CURRENT OF cur01;ENDFOR;END;例二:使用 LOOP 循环CREATE PROCEDURE QGPL/TEST_LOOPLANGUAGE SQLBEGINDECLARE code_v char(10);DECLARE salary_v integer;DECLARE city_v char(20);DECLARE C1 CURSOR FOR-SELECT code,salary,city FROM employee WHERE city=Beijing;OPEN C1
10、;loop_label:LOOP- FETCH C1 INTO code_v,salary_v,city_v;-IF SQLCODE=0 THENSET salary_v=salary_v*1.1;UPDATE employee SET salary=salary_vWHERE CURRENT OF C1;-ELSELEA VE loop_label;-END IF;END LOOP loop_label;CLOSE C1;END;例三:使用 WHILE 循环CREATE PROCEDURE QGPL/TEST_WHILELANGUAGE SQLBEGINDECLARE code_v char
11、(10);DECLARE salary_v integer;DECLARE city_v char(20);DECLARE at_end integer;DECLARE C1 CURSOR FOR-SELECT code,salary,city FROM employee WHERE city=Beijing;OPEN C1;SET at_end=0;WHILE at_end = 0 DO-FETCH C1 INTO code_v,salary_v,city_v;-IF SQLCODE=0 THENSET salary_v=salary_v*1.1;UPDATE employee SET sa
12、lary=salary_vWHERE CURRENT OF C1;-ELSESET at_end=1;-END IF;END WHILE;CLOSE C1;END;例四:使用 REPEAT 循环CREATE PROCEDURE QGPL/TEST_REPEATLANGUAGE SQLBEGINDECLARE code_v char(10);DECLARE salary_v integer;DECLARE city_v char(20);DECLARE C1 CURSOR FOR-SELECT code,salary,city FROM employee WHERE city=Beijing;OPEN C1;repeat_label:REPEAT-FETCH C1 INTO code_v,salary_v,city_v;-IF SQLCOD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃中医药大学招聘急需紧缺专业硕士研究生考前自测高频考点模拟试题附答案详解(突破训练)
- 2025贵州省卫生中心第十三届贵州人才博览会引才模拟试卷及答案详解(夺冠)
- 2025江苏南通市崇川区卫生系统面向毕业生招聘备案制高层次卫生人才15人模拟试卷及一套完整答案详解
- 2025贵州贵水投资发展有限公司贵阳分公司业务外包员工招聘20人考试模拟试题及答案解析
- 2025汉中市幼儿园就业见习招聘(5人)考试参考题库及答案解析
- 锦西石化分公司2025年秋季高校毕业生招聘考试模拟试题及答案解析
- 2025湖南长沙市望城区面向社会招聘教师183人模拟试卷参考答案详解
- 2025中国铁路上海局集团有限公司芜湖东站招聘31人考试参考试题及答案解析
- 2025天河教师笔试题型及答案
- 2025年杭州青少年活动中心公开招聘工作人员2人考试参考题库及答案解析
- 二年级趣味数学校本教材
- 好利来工作协议合同模板
- 中国河流黄河课件
- 《劝学》理解性默写课件-统编版高中语文必修上册
- 煤矿回收材料管理制度
- DB32T 5124.1-2025 临床护理技术规范 第1部分:成人危重症患者目标温度管理
- 《凯勒战略品牌》课件
- 畜禽粪污资源化利用培训
- 女生穿搭技巧学习通超星期末考试答案章节答案2024年
- 2024年大学试题(政治学)-比较政治制度考试近5年真题集锦(频考类试题)带答案
- 输变电工程施工质量验收统一表式附件1:线路工程填写示例
评论
0/150
提交评论