首页 数据库 mysql教程 常用SQL/oracle循环语句

常用SQL/oracle循环语句

Jun 07, 2016 pm 03:44 PM
oracle sql 使用 常用 循环 语句

2、使用T-SQL标准控制结构: 1 定义语句块 2 IF ... ELSE语句 3 IF EXISTS语句 语法: declare select @lname = ‘Smith’ if exists(select * from titles where au_lname = @lname) begin select @msg = ‘There are authors named’ @lname print @msg en

 

2、使用T-SQL标准控制结构:

       1> 定义语句块

       2> IF ... ELSE语句 

       3> IF EXISTS语句

          语法:

              declare              select @lname = ‘Smith’

              if exists(select * from titles where au_lname = @lname)

                 begin

                    select @msg = ‘There are authors named’ + @lname

                    print @msg

                 end

      4> 循环语句:

          示例:

              while @avg_price

              begin

                 select @avg_price          = avg(price) * 1.05,

                        @max_price          = max(price) * 1.05,

                        @time_thru_the_loop = @time_thru_the_loop + 1

              end

              if @time_thru_the_loop = 0

                 select @time_thru_the_loop = 1

              update titles

                 set price = price * power(1.05, @time_thru_the_loop)

 

       4> GOTO语句

          语法:

              GOTO label

              ...

              label:

          示例:

              begin transaction

                 insert tiny(c1) values(1)

                 if @@error != 0 goto error_handler

                 commit transaction

                 return

              error_handler:

                 rollback transaction

                 return

 

       5> RETURN语句

          语法:

              RETURN

          (1)用于无条件退出一个批处理、存储过程或触发器。

               示例:

                   if not exists(select 1 from inventory

                                  where item_num = @item_num)

                   begin

                      raiseerror 51345 ‘Not Found’

                      return

                   end

                   print ‘No error found’

                   return

          (2)用于存储过程中返回状态值。

               示例:

                   create procedure titles_for_a_pub

                          (@pub_name varchar(40) = null)

                   as

                   if @pub_name is null

                      return 15

                   if not exists(select 1 from publishers

                                  where pub_name = @pub_name)

                      return –101

                   select t.tile from publishers p, titles t

                    where p.pub_id = t.pub_id

                      and pub_name = @pub_name

                   return 0   

    2、使用PL/SQL标准控制结构:

       1> 定义语句块

          语法:

              BEGIN

                 Statements ;

              END ;

 

       2> IF ... THEN ... ELSE语句

          语法:

              IF boolean_expression THEN

                 { statement | statement_block } ;

              [ELSIF boolean_expression THEN      /*注意此处的写法—— ELSIF */

                 { statement | statement_block } ;]

              ...

              [ELSE

                 { statement | statement_block } ;]

              END IF ;

 

          示例:

              v_NumberSeats rooms.number_seats%TYPE;

              v_Comment VARCHAR2(35);

              BEGIN

                SELECT number_seats

                  INTO v_NumberSeats

                  FROM rooms

                 WHERE room_id = 99999;

                IF v_NumberSeats

                   v_Comment := 'Fairly small';

                ELSIF v_NumberSeats

                   v_Comment := 'A little bigger';

                ELSE

                   v_Comment := 'Lots of room';

                END IF;

              END;

 

       3> 循环语句:

         (1)简单循环语句:

              语法:

                  LOOP

                     { statement | statement_block } ;

                     [EXIT [WHEN condition] ;]

                  END LOOP ;

                  其中,语句EXIT [WHEN condition];等价于

                      IF condition THEN

                         EXIT ;

                      END IF ;

              示例1:

                  v_Counter BINARY_INTEGER := 1;

                  BEGIN

                    LOOP

                      -- Insert a row into temp_table with the current value of the

                      -- loop counter.

                      INSERT INTO temp_table

                           VALUES (v_Counter, 'Loop index');

                      v_Counter := v_Counter + 1;

                      -- Exit condition - when the loop counter > 50 we will

                      -- break out of the loop.

                      IF v_Counter > 50 THEN

                         EXIT;

                      END IF;

                    END LOOP;

                  END;

 

              示例2:

                  v_Counter BINARY_INTEGER := 1;

                  BEGIN

                    LOOP

                      -- Insert a row into temp_table with the current value of the

                      -- loop counter.

                      INSERT INTO temp_table

                           VALUES (v_Counter, 'Loop index');

                      v_Counter := v_Counter + 1;

                      -- Exit condition - when the loop counter > 50 we will

                      -- break out of the loop.

                      EXIT WHEN v_Counter > 50;

                    END LOOP;

                  END;

 

         (2)WHILE循环语句:

              语法:

                  WHILE condition LOOP

                     { statement | statement_block } ;

                  END LOOP ;

 

              示例1:

                  v_Counter BINARY_INTEGER := 1;

                  BEGIN

                    -- Test the loop counter before each loop iteration to

                    -- insure that it is still less than 50.

                    WHILE v_Counter

                      INSERT INTO temp_table

                           VALUES (v_Counter, 'Loop index');

                      v_Counter := v_Counter + 1;

                    END LOOP;

                  END;

 

              示例2:

                  v_Counter BINARY_INTEGER;

                  BEGIN

                    -- This condition will evaluate to NULL, since v_Counter

                    -- is initialized to NULL by default.

                    WHILE v_Counter

                      INSERT INTO temp_table

                           VALUES (v_Counter, 'Loop index');

                      v_Counter := v_Counter + 1;

                    END LOOP;

                  END;

 

         (3)数字式FOR循环语句:

              语法:

                  FOR loop_counter IN [REVERSE] low_bound..high_bound LOOP

                     { statement | statement_block } ;

                  END LOOP ;

                  这里,loop_counter是隐式声明的索引变量。

 

              示例1:

                  FOR循环的循环索引被隐式声明为BINARY_INTEGER。在循环前面没有

                  必要声明它,如果对它进行了声明,那么循环索引将屏蔽外层的声明,

                  如下所示

                  v_Counter  NUMBER := 7;

                  BEGIN

                    -- Inserts the value 7 into temp_table.

                    INSERT INTO temp_table (num_col)

                      VALUES (v_Counter);

                    -- This loop redeclares v_Counter as a BINARY_INTEGER, which

                    -- hides the NUMBER declaration of v_Counter.

                    FOR v_Counter IN 20..30 LOOP

                      -- Inside the loop, v_Counter ranges from 20 to 30.

                      INSERT INTO temp_table (num_col)

                        VALUES (v_Counter);

                    END LOOP;

                    -- Inserts another 7 into temp_table.

                    INSERT INTO temp_table (num_col)

                      VALUES (v_Counter);

                  END;

 

              示例2:

                  如果在FOR循环中有REVERSE关键字,那么循环索引将从最大值向最

                  小值进行循环。请注意语法是相同的——仍然首先书写的是最小值,

                  如下所示

                  BEGIN

                    FOR v_Counter IN REVERSE 10..50 LOOP

                          NULL;

                    END LOOP;

                  END;

 

              示例3:

                  FOR循环中的最大值和最小值没有必要必须是数字型文字,它们可以

                  是能够被转换为数字值的任何表达式,如下所示

                  v_LowValue      NUMBER := 10;

                  v_HighValue    NUMBER := 40;

                  BEGIN

                    FOR v_Counter IN REVERSE v_LowValue..v_HighValue LOOP

                      INSER INTO temp_table

                          VALUES (v_Counter, ‘Dynamically sqecified loop range’);

                    END LOOP;

                  END;

 

       4> GOTO语句

          语法:

              GOTO label;

              ...

              >

              ...

 

          示例:

              v_Counter  BINARY_INTEGER := 1;

              BEGIN

                LOOP

                  INSERT INTO temp_table

                    VALUES (v_Counter, 'Loop count');

                  v_Counter := v_Counter + 1;

                  IF v_Counter > 50 THEN

                    GOTO l_EndOfLoop;

                  END IF;

                END LOOP;

             

                >

                INSERT INTO temp_table (char_col)

                  VALUES ('Done!');

              END;

 

       5> EXIT语句

          语法:

              EXIT;

          参见上面的PL/SQL标准控制结构之循环语句说明部分。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1663
14
CakePHP 教程
1420
52
Laravel 教程
1313
25
PHP教程
1266
29
C# 教程
1237
24
oracle游标关闭怎么解决 oracle游标关闭怎么解决 Apr 11, 2025 pm 10:18 PM

解决 Oracle 游标关闭问题的方法包括:使用 CLOSE 语句显式关闭游标。在 FOR UPDATE 子句中声明游标,使其在作用域结束后自动关闭。在 USING 子句中声明游标,使其在关联的 PL/SQL 变量关闭时自动关闭。使用异常处理确保在任何异常情况下关闭游标。使用连接池自动关闭游标。禁用自动提交,延迟游标关闭。

oracle怎么循环创建游标 oracle怎么循环创建游标 Apr 12, 2025 am 06:18 AM

Oracle 中,FOR LOOP 循环可动态创建游标, 步骤为:1. 定义游标类型;2. 创建循环;3. 动态创建游标;4. 执行游标;5. 关闭游标。示例:可循环创建游标,显示前 10 名员工姓名和工资。

HDFS配置CentOS需要哪些步骤 HDFS配置CentOS需要哪些步骤 Apr 14, 2025 pm 06:42 PM

在CentOS系统上搭建Hadoop分布式文件系统(HDFS)需要多个步骤,本文提供一个简要的配置指南。一、前期准备安装JDK:在所有节点上安装JavaDevelopmentKit(JDK),版本需与Hadoop兼容。可从Oracle官网下载安装包。环境变量配置:编辑/etc/profile文件,设置Java和Hadoop的环境变量,使系统能够找到JDK和Hadoop的安装路径。二、安全配置:SSH免密登录生成SSH密钥:在每个节点上使用ssh-keygen命令

oracle日志写满怎么办 oracle日志写满怎么办 Apr 12, 2025 am 06:09 AM

Oracle 日志文件写满时,可采用以下解决方案:1)清理旧日志文件;2)增加日志文件大小;3)增加日志文件组;4)设置自动日志管理;5)重新初始化数据库。在实施任何解决方案前,建议备份数据库以防数据丢失。

甲骨文在商业世界中的作用 甲骨文在商业世界中的作用 Apr 23, 2025 am 12:01 AM

Oracle不仅是数据库公司,还是云计算和ERP系统的领导者。1.Oracle提供从数据库到云服务和ERP系统的全面解决方案。2.OracleCloud挑战AWS和Azure,提供IaaS、PaaS和SaaS服务。3.Oracle的ERP系统如E-BusinessSuite和FusionApplications帮助企业优化运营。

oracle数据库怎么停止 oracle数据库怎么停止 Apr 12, 2025 am 06:12 AM

要停止 Oracle 数据库,请执行以下步骤:1. 连接到数据库;2. 优雅关机数据库(shutdown immediate);3. 完全关机数据库(shutdown abort)。

oracle视图怎么导出 oracle视图怎么导出 Apr 12, 2025 am 06:15 AM

可以通过 EXP 实用程序导出 Oracle 视图:登录 Oracle 数据库。启动 EXP 实用程序,指定视图名称和导出目录。输入导出参数,包括目标模式、文件格式和表空间。开始导出。使用 impdp 实用程序验证导出。

centos上weblogic的数据库连接如何配置 centos上weblogic的数据库连接如何配置 Apr 14, 2025 pm 02:06 PM

在CentOS系统上配置WebLogic数据库连接,需要完成以下步骤:JDK安装与环境配置:确保服务器已安装与WebLogic版本兼容的JDK(例如,WebLogic14.1.1通常需要JDK8)。正确设置JAVA_HOME、CLASSPATH和PATH环境变量。WebLogic安装与解压:从Oracle官方网站下载适用于CentOS系统的WebLogic安装包,并将其解压到指定目录。WebLogic用户与目录创建:创建一个专用的WebLogic用户账户,并设置安全密码

See all articles