oracle存储过程----------循环语句,判断语句,游标简单使用

1、简单的存储过程创建

CREATE OR REPLACE PROCEDURE CREATE_VIEW(dblink_name varchar,table_name varchar,view_name varchar)
         IS
              V_SQL VARCHAR2(10240);
         BEGIN
              V_SQL := 'CREATE OR REPLACE VIEW '||view_name||' AS (select * from     
                        '||table_name||'@'||dblink_name||')';
              EXECUTE IMMEDIATE V_SQL;
         END;

2、循环语句

        2.1、简单循环

                       语句:LOOP
                                      要执行的语句;
                                      EXIT WHEN <条件语句> --条件满足,退出循环语句
                                  END LOOP;

DECLARE
    int NUMBER(2) :=0;
BEGIN
   LOOP
      int := int + 1;
      DBMS_OUTPUT.PUT_LINE('int 的当前值为:'||int);
      EXIT WHEN int =10;
   END LOOP;
END;

        2.2、WHILE循环

          语句: WHILE <布尔表达式> LOOP
                             要执行的语句;
                       END LOOP;

DECLARE 
  x NUMBER :=1;
BEGIN
   WHILE x<=10 LOOP
      DBMS_OUTPUT.PUT_LINE('X的当前值为:'||x);
       x:= x+1;
   END LOOP;
END;

        2.3、FOR循环              

            语句:FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
                                  要执行的语句;
                        END LOOP [循环标签];

        每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT退出循环

BEGIN
   FOR int  in 1..10 LOOP
       DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int);
   END LOOP;
END;

3、判断语句

        语句:IF 判断条件 THEN

                        执行的语句;

                   ELSIF 判断条件 THEN

                        执行语句;

                  ELSE

                         执行语句;

                  END IF;

DECLARE 
  x varchar2 :='住宅';
  t number;
BEGIN 
      IF x = '住宅' THEN
        t := 0;
      ELSIF x = '商务' THEN
        t := 2;
      ELSIF x = '商住' THEN
        t := 3;
      ELSE
        t := 9;
      END IF;
END;

4、游标

        语句:cursor 

                  [cursor变量名称]([参数名称] [参数类型]) 

                  IS 

                  [SQL语句,可以使用传入参数]

CURSOR 
cur_netnode 
IS
    SELECT DISTINCT code
    FROM tmp_fetch_data t --for test 优化1
    WHERE code IS NOT NULL;

        4.1、遍历游标的值

                4.1.1、loop fetch使用  

                fetch [cursor变量] into [循环变量]

                when [cursor变量] %notfound;

 DECLARE
    CURSOR cur_netnode IS
      SELECT DISTINCT code
        FROM tmp_fetch_data t
       WHERE code IS NOT NULL;
  BEGIN
    OPEN cur_netnode; --打开游标
    LOOP
      FETCH cur_netnode 
        INTO v_code_src; -- 对应游标查询出的参数值
      EXIT WHEN cur_netnode%NOTFOUND; -- 结束循环条件
      SELECT COUNT(1)
        INTO v_flag_prv
        FROM res_netnode
       WHERE nodename = v_code_src;
      IF v_flag_prv = 0 THEN
        INSERT INTO res_netnode(nodeid,nodename,upnodeid,type,maxsub,status,memo)
        VALUES
          (seq_res_netnode_id.nextval, v_code_src, 0, '1', 0, '1', NULL);
      ELSE
        NULL;
      END IF;
    END LOOP;
  END;

4.1.2、FOR循环方式处理游标

declare
    cursor c_list is select * from  table_User  i where i.id=4;
begin
    for c in c_list loop
        dbms_output.put_line('用户的id='||c.id); -------------输出结果集
    end loop;
end;

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle存储过程中,循环可以通过不同的方式实现。引用\[1\]中给出了三种常见的循环方式。第一种方式是使用`loop`语句,通过设置一个计数器变量,然后在循环体内对计数器进行递增,并在达到指定条件时退出循环。第二种方式是使用`while`循环,同样需要设置一个计数器变量,并在循环体内对计数器进行递增,直到达到指定条件时退出循环。第三种方式是使用`for`循环,可以按照指定的范围进行循环,可以是正序或倒序。在循环体内可以执行相应的操作。 另外,引用\[2\]中给出了一个示例,展示了如何在Oracle存储过程使用`for`循环遍历查询结果,并将结果插入到另一张表中。 总结起来,Oracle存储过程中的循环可以通过`loop`、`while`和`for`等方式实现,具体选择哪种方式取决于具体的需求。 #### 引用[.reference_title] - *1* [oracle-存储过程-循环](https://blog.csdn.net/qq_38188047/article/details/110198527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ORACLE存储过程循环等操作](https://blog.csdn.net/m0_37845840/article/details/117555250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值