精华内容
下载资源
问答
  • oracle 存储过程循环执行update语句

    万次阅读 2016-05-10 18:26:24
    select column1 from table1 ;对column1进行update操作。由于update时,需要对column1进行特殊处理。如果是java程序里,可以先for循环,然后分别update。请问在存储过程里如何实现? 请写一个较为完成的存储过程。...



    select  column1  from table1 ;对column1进行update操作。由于update时,需要对column1进行特殊处理。如果是java程序里,可以先for循环,然后分别update。请问在存储过程里如何实现?
    请写一个较为完成的存储过程。我会适当再加分的。谢谢!
    2012-06-28 13:43 提问者采纳其实二楼写的最简单,但对于新手,最好别那么写,至于1楼,如果数据不是很多,没必要搞个游标。你也可以看看我写的
    create or replace procedure P_Update(o_vc_message out  varchar2)
    is 
    type column1 is table of table1.column1%type index by binary_integer;
    col1s column1;
    type rid is table of rowid index by binary_integer;
    rids rid;
    temp table1.column1%type;
    begin
      select column1,rowid bulk collect into col1s,rids from table1;
      if (column1.count != 0) then
        for  i in col1s.first..col1s.last loop
          temp := col1s(i);--处理 col1s(i) 想干嘛干嘛
          update table1  set column1 = temp where rowid = rids(i);
        end loop;
      end if; 
      o_vc_message := 'OK!';
    exception 
      when others then
        o_vc_message := 'exception happend.' || sqlcode || sqlerrm;
        rollback;
        return;
    end P_Update; 
    
    如果仅仅是简单处理column1,比如加1什么的,就别搞那么复杂,一个sql就ok了。
    展开全文
  • 初到公司的第一个工作任务:(用Oracle的job定时对一个值进行累加计算);...========创建存储过程,定义游标循环执行update语句 create or replace procedure JOBTCOUNT as begin declare  cursor e

    初到公司的第一个工作任务:(用Oracle的job定时对一个值进行累加计算);

    虽然比较简单,但是由于已经两年多没有用过存储过程和游标这些了,所以重新温习了下;


    记下笔记


    ========创建存储过程,定义游标循环执行update语句

    create or replace procedure JOBTCOUNT as
    begin
    declare
        cursor emp_cur is
         select T_COUNT from JOB_T_BUSINESS_COUNT  for update ;  
    begin 
           for emp_row in emp_cur 
             loop
               update JOB_T_BUSINESS_COUNT set T_COUNT=T_COUNT+0.5 where current of emp_cur;
             end loop;
           commit;
    end;
    end;


    ==========创建job任务每秒执行一次
    SQL> variable jobbusinesscount number;
    SQL> begin
      2   dbms_job.submit(:jobbusinesscount,'JOBTCOUNT;',sysdate,'sysdate+1/86400');
      3  end;
      4  /

    ========启动job任务
    SQL> begin
      2  dbms_job.run(:jobbusinesscount);
      3  end;

      4  /

    ========删除job任务
    SQL> begin
      2  dbms_job.remove(:jobbusinesscount);
      3  end;

      4  /

    ===查询job
    select  *  from dba_jobs



    =======启动job(登陆用户为创建该job的属主)

     exec DBMS_JOB.broken(22,false);  

    ==停止

     exec DBMS_JOB.broken(22,true);

    展开全文
  • select in 循环用来增强交互性,它可以显示出带编号的菜单,用户输入不同的编号就可以选择不同的菜单,并执行不同的功能 select in 是 Shell 独有的一种循环,非常适合终端(Terminal)这样的交互场景,C语言、C++、...
  • 今天在工作的时候,遇到一个需求。...本能的想到了for循环执行,然后老大丢了一个sql过来,一下子蒙蔽了,后来在其讲解的条件下懂了,本着好东西不私藏道理在这里分享出来。 BEGIN /*下面这三行就是相当于...

    今天在工作的时候,遇到一个需求。

        需要去把一个字段(原本是uuid),改成00001,00002,这样的格式。如果是数据比较少当然无所谓了,但是表里面有上千条数据,这个时候再去手动修改就不科学了。

     

    本能的想到了for循环去执行,然后老大丢了一个sql过来,一下子蒙蔽了,后来在其讲解的条件下懂了,本着好东西不私藏道理在这里分享出来。

     

    BEGIN
    	/*下面这三行就是相当于定义变量   变量名,变量类型,默认值 */
     declare  no_more_record int DEFAULT 0;
     DECLARE  x int;
     DECLARE  x1 VARCHAR(100);
     DECLARE  akey varchar(100);
    	/*首先这里对游标进行定义*/
    	/*cur_record 也是一个随便取的名字 */
     DECLARE  cur_record CURSOR FOR  SELECT supplier_key from equi_supplier;  	
     /*这个是个条件处理,针对NOT FOUND的条件,当没有记录时赋值为1*/
    	/* 判断上面你写的 查询语句是否有返回的数据 */
     DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1;
     /*接着使用OPEN打开游标*/
     OPEN  cur_record; 
    /*把第一行数据写入变量中,游标也随之指向了记录的第一行*/
    /* 这里就相当于把上面的你写的select查询的查询结果第一条赋值给akey这个变量 */
     FETCH  cur_record INTO akey; 
    /* 这个相当于一个赋值*/
    set x=0;
    /* 这里是一个循环判断 */
     WHILE no_more_record != 1 DO
    	set x=x+1;
    	/* CAST(x AS CHAR)  把 int 类型的x 转成 CHAR */
    	/* CONCAT('000000',CAST(x AS CHAR)) 联合字符串再 00000后面追加x */
    	/* RIGHT(CONCAT('000000',CAST(x AS CHAR)),5)   去前面字符串的前5位 */
    	set x1=RIGHT(CONCAT('000000',CAST(x AS CHAR)),5);
    	/* 你所要循环执行的语句 */
    	update equi_supplier set supplier_no=x1 where supplier_key = akey;
    	/* 一次循环结束再次取出下一个游标值 */
    	FETCH  cur_record INTO akey;
     END WHILE;
    /*用完后记得用CLOSE把资源释放掉*/
     CLOSE  cur_record;  
    select 0;
    END

    最后运用,我这里以navicat为例

     

     

    然后直接像你平时运行sql一样去运行     call aa();   这里的 aa 就是我刚刚保存的名字

     

    代码全部的涵义已经写出来了,当然这是一个简单的逻辑。如果你还有其它需求,可以自行增加代码

     

     

    今天又遇到一个新的需求(更新)

    需要给表中一级数据添加编号   0001,给表中二级数据添加编号 0001001,给表中三级数据添加编号 00001001001。

     

    给一级数据添加编号就是上面的那个,主要是二级三级比较复杂。需要用到游标嵌套

    找了半天的相关文章,代码都乱七八糟的,很难的去看懂,为了代码的简洁我就不写注释了(注释在上一个函数里面全部都写的很清楚了)

    修改二级分类为00001001格式

    BEGIN
    	declare  no_more_record int DEFAULT 0;
    	DECLARE  x1 VARCHAR(100);
    	DECLARE  key_1 varchar(100);
    
    	DECLARE  equi_dict_1 CURSOR FOR  SELECT dict_key,dict_no from equi_dict WHERE dict_lvl = 1;  	
    	DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1;
    
    	OPEN  equi_dict_1; 
    	FETCH  equi_dict_1 INTO key_1,x1; 
    	WHILE no_more_record != 1 DO
    				
    		BEGIN
    			declare  no_more_record_2 int DEFAULT 0;
    			DECLARE  x int;
    			DECLARE  x2 VARCHAR(100); 
    			DECLARE  key_2 varchar(100);
    
    			DECLARE  equi_dict_2 CURSOR FOR  SELECT dict_key from equi_dict WHERE prod_name_key = key_1; 
    			DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record_2 = 1;
    
    			OPEN equi_dict_2;			
    			FETCH equi_dict_2 INTO key_2;
    			set x=0;
    			WHILE no_more_record_2 != 1 DO
    				set x=x+1;
    				set x2=RIGHT(CONCAT('00',CAST(x AS CHAR)),3);
    				set x2=CONCAT(x1,x2);
    				update equi_dict set dict_no=x2 where dict_key = key_2 AND dict_lvl = 2;
    				FETCH equi_dict_2 INTO key_2;
    
    			END WHILE;
    		  CLOSE  equi_dict_2;  
    		END;
    
    		FETCH  equi_dict_1 INTO key_1,x1; 
    	END WHILE;
    	CLOSE  equi_dict_1;  
    	select 0;
    END

    修改三级分类为00001001001格式

    BEGIN
     declare  no_more_record int DEFAULT 0;
     DECLARE  x1 VARCHAR(100);
     DECLARE  key_1 varchar(100);
    
     DECLARE  equi_dict_1 CURSOR FOR  SELECT dict_key,dict_no from equi_dict WHERE dict_lvl = 2;  	
     DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1;
    
     OPEN  equi_dict_1; 
     FETCH  equi_dict_1 INTO key_1,x1; 
     WHILE no_more_record != 1 DO
    
    		BEGIN
    			declare  no_more_record_2 int DEFAULT 0;
    			DECLARE  x int;
    			DECLARE  x2 VARCHAR(100); 
    			DECLARE  key_2 varchar(100);
    
    			DECLARE  equi_dict_2 CURSOR FOR  SELECT dict_key from equi_dict WHERE prod_mfr_key = key_1 AND dict_lvl = 3;
    			DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record_2 = 1;
    
    			OPEN equi_dict_2;			
    			FETCH equi_dict_2 INTO key_2;
    			set x=0;
    			WHILE no_more_record_2 != 1 DO
    
    				set x=x+1;
    				set x2=RIGHT(CONCAT('00',CAST(x AS CHAR)),3);
    				set x2=CONCAT(x1,x2);
    				update equi_dict set dict_no=x2 where dict_key = key_2;
    				FETCH equi_dict_2 INTO key_2;
    
    			END WHILE;
    		  CLOSE  equi_dict_2;  
    		END;
    
    		FETCH  equi_dict_1 INTO key_1,x1; 
     END WHILE;
    /*用完后记得用CLOSE把资源释放掉*/
     CLOSE  equi_dict_1;  
    select 0;
    END

     

     

     

     

     

     

    展开全文
  • oracle中的for循环用法比较简单,但是在一次用到包涵select语句的for循环时,还是发现了一些自己以前没有注意的东西。  我的代码如下: declare val1 date;val2 date;begin for i in (select empno from emp_s)...
          oracle中的for循环用法比较简单,但是在一次用到包涵select语句的for循环时,还是发现了一些自己以前没有注意的东西。
          我的代码如下:
    declare
    val1 date;
    val2 date;
    begin
       for i in (select empno from emp_s) loop
        select hiredate into val1 from (select empno,hiredate,rank()over(order by hiredate) a from emp_s where empno=i) where a=1;
        select hiredate into val2 from (select empno,hiredate,rank()over(order by hiredate) a from emp_s where empno=i) where a=2;
         dbms_output.put_line(val2-val1);
      end loop;
    exception
      when others then
        dbms_output.put_line(sqlerrm);
    end;
    编译的时候发现抛出两处PLS-00382错误。修改后编译通过!(修改处用红字标明!)
    declare
    val1 date;
    val2 date;
    begin
      for i in (select empno from emp_s) loop
        select hiredate into val1 from (select empno,hiredate,rank()over(order by hiredate) a from emp_s where empno= i.empno) where a=1;
        select hiredate into val2 from (select empno,hiredate,rank()over(order by hiredate) a from emp_s where empno= i.empno) where a=2;
         dbms_output.put_line(val2-val1);
      end loop;
    exception
      when others then
        dbms_output.put_line(sqlerrm);
    end;
         从上面的两个例子里面我们可以很明显的看出来,在包涵select语句的for循环中,变量i是被当做表类型来处理的(即使你的select语句中只取了一列数据)。所以当我们把i改成i.empno时编译顺利通过。
     

    本文出自 “技术” 博客,请务必保留此出处http://589985.blog.51cto.com/1609992/1081341

    展开全文
  • 今天在mysql中创建索引时,一直卡住不动,刚开始以为可能是数据量太大导致的,可是一直等了很久还是一样没有反应,看来操作的表被锁住了,执行show processlist 果然发现有大量的lock,使用kill id单独杀死连接是...
  • Shell中select循环语句实例

    千次阅读 2018-07-06 04:07:42
    ​ commandNdoneselect循环语句由如下特点:select语句使用Bash内部变量PS3的值作为它的提示符信息。打印到屏幕上的列表LIST中的每一项都会加上一个数字编号。当用户输入的数字和某一个数字编号一致时,列表中响应的...
  • SQL 的select 语句完整的执行顺序

    千次阅读 2018-08-05 18:34:28
    SQL Select 语句完整的执行顺序:  1、from 子句组装来自不同数据源的数据;  2、where 子句基于指定的条件对记录行进行筛选;  3、group by 子句将数据划分为多个分组;  4、使用聚集函数进行计算;  5、使用...
  • MySQL数据库-条件语句循环语句、动态执行SQL语句   1、if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THEN SELECT 1; ELSEIF i = 2 THEN SE
  • Mysql同时执行多个select语句——union

    万次阅读 热门讨论 2016-08-08 12:53:59
     今天小编在改bug的时候遇到一个既简单又让人头疼的问题,由于底层封装的执行sql语句的方法中没有合适我的,所以我只能在我的D层动手脚了…… 经验 下面来说说我今天的情况:  我们新建一个抽奖活动的时候需要...
  • SQL Server循环执行动态SQL语句.

    千次阅读 2015-02-03 15:17:13
    SQL Server循环执行动态SQL语句. 2015年2月3日15:14:20 使用Navicate工具执行查询成功。 declare @name nvarchar(100) declare @sql nvarchar(200) declare @i int set @i =10000 while @i begin set @name =...
  • Go语言-select语句

    千次阅读 2018-05-02 21:25:18
    select语句属于条件分支流程控制方法,不过它只能用于通道。它可以包含若干条case语句,并根据条件选择其中的一个执行。进一步说,select语句中的case关键字只能后跟用于通道的发送操作的表达式以及接收操作的表达式...
  • 图解Go select语句原理

    千次阅读 2019-03-31 17:23:29
    Go 的select语句是一种仅能用于channl发送和接收消息的专用语句,此语句运行期间是阻塞的;当select中没有case语句的时候,会阻塞当前的groutine。所以,有人也会说select是用来阻塞监听goroutine的。 还有人说:...
  • oracle数据库update循环执行语句

    千次阅读 2011-02-14 15:40:00
    declare maxrows number default 5000;... cursor acnt_first_cur is select t2.cert_number from tb_pnt_cust_551 t,party_centification t2 where t.pty_id = t2.party_id and t2.cert_type = 1 
  •  最近朋友做项目遇到以上错,分析原因在于循环中使用了prepareStatement来执行sql导致游标错误,最后在代码的ps.execute()下面调用prepareStatement的close方法解决问题(由于对游标不太了解,所以没有发现更好的...
  • JDBC批处理Select语句

    千次阅读 2013-08-20 14:49:37
    但不幸的是对于批量查询,JDBC并没有内建(built-in)的方法,而且JDBC执行批处理的时候也不能有SELECT语句,如: 1 2 3 Statement pstmt = conn....
  • 一条SQL语句执行流程前言MySQL架构 前言 MySQL架构
  • 原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务。 就算重启成功了,对于问题的原因仍...
  • MySQL数据库-条件语句循环语句、动态执行SQL语句   1、if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THEN SELECT 1; ELSEIF i = 2 THEN SELECT 2; .....
  • SELECT语句中的数学问题

    千次阅读 2012-10-07 12:00:56
    6.2SELECT语句中的数学问题 6.2.1 SQL Server中的变量 Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。 1. 局部变量 局部变量是一个能够拥有特定数据类型...
  • shell编程——select语句

    千次阅读 2015-02-07 23:47:02
    select 表达式是一种bash的扩展应用,动作包括:  自动用1,2,3,4列出菜单 (没有echo指令,自动显示菜单)  自动read输入选择 (没有 read指令,自动输入)  赋值给变量 (没有赋值指令,自动输入数字后,赋值...
  • shell编程中select语句的使用

    千次阅读 2018-10-01 12:50:23
    利用select语句可以非常方便的实现菜单循环结构,其语法如下 select variable in list #将列表中的每一个菜单项之前添加从1开始递增的序号 #显示环境变量PS3的值(存放的是引导用户输入的提示信息) #用户选择的...
  • 游标的概念:   游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表...在前述程序中用到的SELECT...INTO...查
  • SHELL里用SELECT语句做INSERT语句.

    千次阅读 2010-01-19 15:41:00
    以前再看SQL cookbook的时候看到过用SELECT语句来拼出INSERT语句.当时只是知道有这方法,实际应用没用过.但是今天确实用上了.还是很多.现在Unix环境中有几个bach文件定时的跑.当他们运行一大堆query的时候,以前是都保...
  • DB2数据库SELECT语句的三种高级用法

    千次阅读 2009-10-27 16:09:00
    DB2数据库SELECT语句的三种高级用法作者: database, 出处:IT专家网论坛, 责任编辑: 陈子琪, 来自:http://database.ctocio.com.cn/5/9220005.shtml ... SELECT语句是数据库查询的重要语句,这里介绍三种SELECT语句
  • java for循环里面执行sql语句操作,有效结果只有一次,只执行了一次sql mybatis 循环执行update生效一次 实际只执行一次 java后台controller中,for循环执行数据库操作,但是发现实际仅仅执行了一次,或者说...
  • 按照这位博主的回答,果然是这个问题,我的业务是想在select 上进行汇总,如下语句: <select id="getWageMonthDataPiece" resultType="Map"> SELECT SUM( ${item} </foreach> ) from wage_...
  • (尊重劳动成果,转载请注明出处:https://yangwenqiang.blog.csdn.net/article/details/90544530冷血...MySQL原理与实践(一):一条select语句引出Server层和存储引擎层 MySQL原理与实践(二):一条update语句引...
  • 用SHELL的循环批量执行SQL语句

    千次阅读 2010-03-09 15:42:00
    --ksh下的一个WHILE 循环的例子integer i=1while ((ido pirnt $i i=i+1done--ksh 下一个FOR循环的例子for i in `cat listdate.txt`do echo "执行 $i "done--- date.pl 用于生成一个时间段文件#!/usr/local/bin/...
  • 本文不再copy前人们累积的select的用法等文章,旨在把这些年从初学者开始接触select语句所遇到的问题和解决办法写在这,一是帮助自己累积,二是希望可以供大家参考,有错的请拍砖,欢迎查错补漏! 1、select里面用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 146,483
精华内容 58,593
关键字:

循环执行select语句