oracle存储过程中循环插入数据

//oracle 循环插入数据

procedure Insert_WData(  p_CODE1 ao_model.code1%type,
                                    p_BRANDID    ao_model.brandid%type,
                                    p_CODE  varchar2,
                                    p_CONF_VAL   varchar2,
                                    p_DESC  varchar2,
                                    p_CODE2 varchar2,
                                    p_DESC  varchar2,
                                    ErrOut             in out varchar2) is
  begin
    --参数
    declare
      startposition1 number(10);
      len1           number(10);
      startposition2 number(10);
      len2           number(10);
      startposition3 number(10);
      len3           number(10);
      output1        varchar2(1024);
      output2        varchar2(1024);
      output3        varchar2(1024);
      num            number(1);
    begin
      startposition1 := 1;
      startposition2 := 1;
      startposition3 := 1;
      loop
        select instr(p_CODE, ‘|‘, startposition1)
          into len1
          from dual;
        select instr(p_CONF_VAL, ‘|‘, startposition2)
          into len2
          from dual;
        select instr(p_DESC, ‘|‘, startposition3)
          into len3
          from dual;
        if len1 != 0 then
          begin
            select substr(p_CODE,
                          startposition1,
                          len1 - startposition1)
              into output1
              from dual;
            select substr(p_CONF_VAL,
                          startposition2,
                          len2 - startposition2)
              into output2
              from dual;
            select substr(p_DESC,
                          startposition3,
                          len3 - startposition3)
              into output3
              from dual;
            num := 0;
            select count(*)
              into num
              from ao_model a
             where a.c0084_brandid = p_BRANDID
               and a.c0001_code1 = p_CODE1
               and a.c0001_code = output1;
            if num >= 1 then
              update ao_model b
                 set b.conf_val = output2
               where b.c0084_brandid = p_BRANDID
                 and b.c0001_code1 = p_CODE1
                 and b.c0001_code = output1;

            else
              insert into ao_model
                (C0001_CODE1,
                 C0084_BRANDID,
                 C0001_CODE,
                 CONF_VAL,
                 DESC)
              values
                (p_CODE1,
                 p_BRANDID,
                 output1 || ‘‘,
                 output2 || ‘‘,
                 output3 || ‘‘);
            end if;
            commit;
          end;
        else
          begin
            select substr(p_CODE, startposition1)
              into output1
              from dual;
            select substr(p_CONF_VAL, startposition2)
              into output2
              from dual;
            select substr(p_DESC, startposition3)
              into output3
              from dual;
            num := 0;
            select count(*)
              into num
              from ao_model a
             where a.c0084_brandid = p_BRANDID
               and a.c0001_code1 = p_CODE1
               and a.c0001_code = output1;
            if num >= 1 then
              update ao_model b
                 set b.conf_val = output2
               where b.c0084_brandid = p_BRANDID
                 and b.c0001_code1 = p_CODE1
                 and b.c0001_code = output1;

            else
              insert into ao_model
                (C0001_CODE1,
                 C0084_BRANDID,
                 C0001_CODE,
                 CONF_VAL,
                 DESC)
              values
                (p_CODE1,
                 p_BRANDID,
                 output1 || ‘‘,
                 output2 || ‘‘,
                 output3 || ‘‘);
            end if;
            commit;
          end;
          exit;
        end if;
        startposition1 := len1 + 1;
        startposition2 := len2 + 1;
        startposition3 := len3 + 1;
      end loop;
    end;
  EXCEPTION
    WHEN OTHERS THEN
      ErrOut := SQLERRM;
      rollback;

  end Insert_WParamStatusData;
时间: 2024-10-10 15:38:11

oracle存储过程中循环插入数据的相关文章

Mysql向表中循环插入数据

今天学习Mysql,做实验时想向一个标准插入1000行数据,在oracle中类似于这样 begin for i in 1..1000 loop insert .. end loop; end; / 但是Mysql中不支持匿名块 百度了一下,方法如下: 首先设置delimiter delimiter的作用:告诉解释器,这段命令是否已经结束了,mysql是否可以执行了 默认情况下,delimiter是':'但是当我们编写procedure时,如果是默认设置,那么一遇到':',mysql就要执行,这是

mysql中循环插入数据--造测试数据

背景描述 测试需求:如上图,筛选按预约数排序靠前的机构,排名第51及之后的机构不显示. 验证功能前,测试数据中至少有50个不同预约数, 实现方式: 1.或手工往数据库表中插入  ,50个机构下分别添加不同的预约数,要边添加.边记录预约数. 2.按某种规律生成数据,往数据库表中插入. 3.用sql语句循环写数据,(提前是找到规律) ------------------------------------------------------------------------------------

将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其他的方法,不过这个方法已经实现,就写一下了: 1.创建表. CREATE TABLE [dbo].[person]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Pwd] [nvarchar](50) NULL, [Age]

创建存储过程向表中循环添加数据

CREATE PROCEDURE dowhile() BEGIN DECLARE n int; set n=1; WHILE n<=1000 do INSERT into hasindex(num) VALUES (n); set n=n+1; END WHILE; END; CALL dowhile();创建存储过程向表中循环添加数据

oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?

Oracle 语句中"||"代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335select * from tablename order by col; 结果就是 cola123a234b335b999 如果按倒序排列:select * from tablename order by col desc; 结果就是 colb999b335a234a123 其他回答 先创

Oracle存储过程中异常Exception的捕捉和处理

Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Varchar2) AUTHID CURRENT_USER AS --声明异常 some_kinds_of_err EXCEPTION; -- Exception to indicate an error condition v_ErrorCode NUMBER; -- Variable to hold

【翻译自mos文章】在Oracle GoldenGate中循环使用ggserr.log的方法

在OGG中循环使用ggserr.log的方法: 参考原文: OGG How Do I Recycle The "ggserr.log" File? (Doc ID 967932.1) 适用于: Oracle GoldenGate - Version 4.0.0 and later Generic Linux 问题 GoldenGate的 ggserr.log 日志文件包括有关 GoldenGate 事件的信息,比如:进程启动,关闭,error ,warning.该文件可能会变的很大.为

Oracle存储过程中跳出循环的写法

Oracle存储过程中跳出循环的写法 博客分类: oracle Oracle 记录exit和return的用法 exit用来跳出循环 loop IF V_KBP IS NULL THEN           EXIT;    END IF; end loop; return跳出存储过程 loop IF V_KBP IS NULL THEN         return;    END IF; end loop; 跳出loop 一次循环 oracle 11g已提供continue; oracle

向Oracle数据库中CLOB插入数据报错问题

今天在项目中向数据库的CLOB属性插入一段篇文章(1000~2000)字就会报一个字符串过长的错误. 网上说用流来处理,没有这么做.这像是一个Bug,只要把插入的数据,默认扩充到2000以上就ok了. 下面是这段代码: if((temp.length()>=1000)&&(temp.length()<=2000)){ temp=StringUtils.rightPad(temp, 2008); } 使用StringUtils的rightPad方法使没超过2000的部分,在右边自