精华内容
下载资源
问答
  • 判断游标是否有数据
    2021-05-07 04:15:31

    1, 游标在存储过程中的使用

    V_ONE_MSC_RECORD          PB_MSC_KQI_RTKPI_MIN%ROWTYPE;            --MSC记录类型

    V_MAX_TIME                NUMBER(10);                              --告警表中最大的发生时间

    ......

    SELECT MAX(OCCURTIME) INTO V_MAX_TIME FROM OC_ALARM;

    IF V_MAX_TIME IS NULL THEN

    V_MAX_TIME := 0;

    END IF;

    CURSOR C_MSC IS

    --查询表中不重复的记录,以最新(即rowid最大)的记录为准

    SELECT * FROM PB_MSC_KQI_RTKPI_MIN P1 WHERE ROWID = (

    SELECT MAX(ROWID) FROM PB_MSC_KQI_RTKPI_MIN P2 WHERE P1.MSCNO = P2.MSCNO

    )

    AND (P1.STARTTIME + 60) > V_MAX_TIME;

    ......

    --开始对msc新增记录进行循环

    FOR V_ONE_MSC_RECORD IN C_MSC

    LOOP

    BEGIN

    此处可以使用V_ONE_MSC_RECORD.column_name, 的形式,访问一行的数据,可以直接处理,也可以调用其他的存储过程

    END;    END LOOP;

    更多相关内容
  • 1、声明包create or replace package TAL_TEST is-- Author : ADMINISTRATOR-- Created : 2012/12/9 15:15:38-- Purpose : XXXX的测试TYPE ...--测试空游标PROCEDURE p_testEmptyCursor;end TAL_TEST;2、...

    1、声明包

    create or replace package TAL_TEST is

    -- Author : ADMINISTRATOR

    -- Created : 2012/12/9 15:15:38

    -- Purpose : XXXX的测试

    TYPE myCursorType IS REF CURSOR;

    --测试空游标

    PROCEDURE p_testEmptyCursor;

    end TAL_TEST;

    2、包体

    create or replace package body TAL_TEST is

    --测试空游标

    PROCEDURE p_testEmptyCursor

    IS

    rowRecord SJ_CD_PERIODS%ROWTYPE;

    myCursorFirst myCursorType ;

    myCursorSecond myCursorType;

    myCursorThird myCursorType;

    myCursorForth myCursorType;

    BEGIN

    --使用notfound(失败) 数据库中不存在限制条件下的数据集

    OPEN myCursorFirst FOR

    SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001' ;

    IF myCursorFirst%notfound THEN

    dbms_output.put_line('数据库中不存在FPERIODID为1001的数据集');

    ELSE

    dbms_output.put_line('数据库中存在FPERIODID为1001的数据库');

    END IF;

    --使用ROWCOUNT(失败)数据库中存在限制条件下的数据集

    OPEN myCursorSecond FOR

    SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';

    IF myCursorSecond%ROWCOUNT = 0 THEN

    dbms_output.put_line('数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集');

    ELSE

    dbms_output.put_line('数据库中存在FPERIODID为20112012141202260210001003001002002的数据集');

    END IF;

    --使用FETCH(成功)数据库中存在限制条件下的数据集

    OPEN myCursorThird FOR

    SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';

    FETCH myCursorThird INTO rowRecord;

    IF myCursorThird%NOTFOUND THEN

    dbms_output.put_line('数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集');

    ELSE

    dbms_output.put_line('数据库中存在FPERIODID为20112012141202260210001003001002002的数据集');

    END IF;

    --使用FETCH(成功)数据库中不存在限制条件下的数据集

    OPEN myCursorForth FOR

    SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001';

    FETCH myCursorForth INTO rowRecord;

    IF myCursorForth%NOTFOUND THEN

    dbms_output.put_line('数据库中不存在FPERIODID为1001的数据集');

    ELSE

    dbms_output.put_line('数据库中存在FPERIODID为1001的数据集');

    END IF;

    END;

    end TAL_TEST;

    3、下面对上述的测试进行说明

    myCursorFirst:

    --使用notfound(失败) 数据库中不存在限制条件下的数据集

    OPEN myCursorFirst FOR

    SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001' ;

    IF myCursorFirst%notfound THEN

    dbms_output.put_line('数据库中不存在FPERIODID为1001的数据集');

    ELSE

    dbms_output.put_line('数据库中存在FPERIODID为1001的数据库');

    END IF;

    在我的数据库中是不存在编号'1001'的数据集的。但在调试代码的时候:

    程序运行不正确。

    说明:其实上述的IF语句就有问题myCursorFirst%notFound肯定为Flase

    myCursorSecond:

    --使用ROWCOUNT(失败)数据库中存在限制条件下的数据集

    OPEN myCursorSecond FOR

    SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';

    IF myCursorSecond%ROWCOUNT = 0 THEN

    dbms_output.put_line('数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集');

    ELSE

    dbms_output.put_line('数据库中存在FPERIODID为20112012141202260210001003001002002的数据集');

    END IF;

    在我的数据库中是存在上述标号的数据集的。但在调试代码的时候:

    程序运行不正确。

    说明:当游标不FETCH.%ROWCOUNT属性就一直是0,所以根据这个判断是没有用的。一般都是先Fetch一下,执行完Fetch操作后,再利用%NOTFOUND判断Cursor中有没有数据。于是就有了下面的两个测试。

    myCursorThird

    --使用FETCH(成功)数据库中存在限制条件下的数据集

    OPEN myCursorThird FOR

    SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';

    FETCH myCursorThird INTO rowRecord;

    IF myCursorThird%NOTFOUND THEN

    dbms_output.put_line('数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集');

    ELSE

    dbms_output.put_line('数据库中存在FPERIODID为20112012141202260210001003001002002的数据集');

    END IF;

    我的数据库中存在上述的数据集,程序运行的结果为:

    程序运行成功。

    myCursorForth:

    --使用FETCH(成功)数据库中不存在限制条件下的数据集

    OPEN myCursorForth FOR

    SELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001';

    FETCH myCursorForth INTO rowRecord;

    IF myCursorForth%NOTFOUND THEN

    dbms_output.put_line('数据库中不存在FPERIODID为1001的数据集');

    ELSE

    dbms_output.put_line('数据库中存在FPERIODID为1001的数据集');

    END IF;

    我的数据库中不存在1001的数据集。程序运行的结果为:

    程序运行正确。

    总结:在昨晚和喜姣讨论的时候,我还以为Oracle中有提供直接判断cursor是否为空的函数,今天来在网上搜索了一下,貌似没有。对于cursor来说,只Open,不Fetch的时候,Cursor是不会知道到底有多少数据的。当然你也可以select count(*)......

    欢迎指出错误。

    总结

    以上是编程之家为你收集整理的Oracle中判断空游标的方法全部内容,希望文章能够帮你解决Oracle中判断空游标的方法所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    展开全文
  • sql server中如何判断游标是否存在

    千次阅读 2013-06-06 16:29:45
    --测试 DECLARE @SNAME VARCHAR(20) DECLARE DD CURSOR FOR SELECT SNAME FROM S OPEN DD --楼上说的对.你要的是判断游标是否存在 ...--以下操作为判断游标是否存在的同时检测游标状态。 SELECT (CAS
    --测试
    DECLARE @SNAME VARCHAR(20)
    DECLARE DD  CURSOR FOR SELECT SNAME FROM S
    OPEN DD
    --楼上说的对.你要的是判断游标是否存在
    select * from MASTER.dbo.syscursors where cursor_name='DD'
    --以下操作为判断游标是否存在的同时检测游标状态。
    SELECT (CASE WHEN CURSOR_STATUS('global','DD')=1 THEN '游标的结果集至少有一行'
                WHEN CURSOR_STATUS('global','DD')=0 THEN '游标的结果集为空'
                WHEN CURSOR_STATUS('global','DD')=-1 THEN '游标被关闭'
                WHEN CURSOR_STATUS('global','DD')=-2 THEN '游标不适用'
                WHEN CURSOR_STATUS('global','DD')=-3 THEN '游标不存在' END) AS RESULT
    /*返回结果:
    1
     游标的结果集至少有一行。
    
    对于不区分的游标和键集游标,结果集至少有一行。
    
    对于动态游标,结果集可以有零行、一行或多行。
     分配给该变量的游标已打开。
    
    对于不区分的游标和键集游标,结果集至少有一行。
    
    对于动态游标,结果集可以有零行、一行或多行。
     
    0
     游标的结果集为空。*
     分配给该变量的游标已经打开,然而结果集肯定为空。*
     
    -1
     游标被关闭。
     分配给该变量的游标被关闭。
     
    -2
     不适用。
     可以是:
    
    先前调用的过程并没有将游标分配给 OUTPUT 变量。
    
    先前调用的过程为 OUTPUT 变量分配了游标,然而在过程结束时,游标处于关闭状态。因此,游标被释放,并且没有返回调用过程。
    
    没有将游标分配给已声明的游标变量。
     
    -3
     具有指定名称的游标不存在。
     具有指定名称的游标变量并不存在,或者即使存在这样一个游标变量,但并没有给它分配游标。

    展开全文
  • 1.使用select into begin  select dno into v_dno from tbl where xxx. exception  when no_data_found then  --无数据 ...2.游标fetch open mycursor; fetch mycursor into rec;  if myc...

    1.使用select into

    begin
      select dno into v_dno from tbl where xxx.
    exception
      when no_data_found then
      --无数据
    end;
    

      

    2.游标fetch

    open mycursor;
    fetch mycursor into rec;
      if mycursor%notfound then
        --无数据
      end if;
    close mycursor;

    3.游标%rowcount属性判断

    open mycursor;
      if mycursor%rowcount =0 then
        --无数据
      end if;
     close mycursor;

    注意:打开游标之后不fetch,就判断游标%notfound是不行的。不论有没有数据都会返回true。

    转载于:https://www.cnblogs.com/luckystar2010/p/3431892.html

    展开全文
  • 游标循环读取数据.txt

    2019-07-05 15:37:28
    游标用于存储过程中,循环读取数据并插入指定的表中(也可以添加判断插入不同的表)
  • 前几天遇到一个mysql游标不到数据问题,这个问题困扰了我两天,现在终于解决了,下面小编就来为大家分享一下。这是建表语句,插入两行数据drop table如果存在testinfo;创建表testinfo(name varchar(10)not null,...
  • if cursor_status('global','myformula')=-3 and cursor_status('local','myformula')=-3 begin print '不存在' end else begin print '存在' end
  • 1、声明包 www.2cto.com01createorreplacepackage TAL_TESTis0203— Author : ADMINISTRATOR04— Created : 2012/12/9 15:15:3805— Purpose : XXXX的测试0607TYPE ...0809–测试空游标10PROCEDUREp_testEmpty...
  • oracle 显式游标

    2021-05-08 05:28:39
    1.语法CURSOR cursor_name[(parameter_name datatype,...)]IS select_statement; --游标关联的SELECT语句,该语句不能使用SELECT...INTO...语句使用步骤1.声明游标DECLARE CURSOR cursor_nameIS SELECT_...读取数据:...
  • 游标一般适用于大结果集,大结果集在内存中放不下 且 数据可以一条一条处理的情况 比较适合使用游标游标的使用简单总结可以分为三步: 1. 定义游标 2. 打开游标 3. 使用游标 - 注意游标一般适用于大结果集,大...
  • I have a mysql function that returns a varchar value. Inside this function I have define a cursor which only gives a single value. This means in my select statement, I have taken a specific value usin...
  • #判断是否结束循环 if dones=1 then leave posLoop; END IF; #取游标中的值 FETCH cur_user_id INTO user_ids,mobile; update hr_f_personal_basic_information set payload=JSON_SET(payload, "$.mobile", mobile...
  • create proc wcProc as declare @wc nvarchar(30),  @rgid nvarchar(30),  @cur cursor,  @job nvarchar(30), set @cur = CURSOR LOCAL STATIC FOR --设置静态游标  select job,wc
  • 1.mysql存储过程 drop procedure if exists curdemo CREATE PROCEDURE curdemo(pid int) BEGIN DECLARE notfound INT ... #定义一个辅助变量用于判断 DECLARE a int; #定义游标输出值赋予的变量 DECLARE ...
  • 以Oracle显示游标为主,本文讲述了如何打开Oracle游标,以及想关的实际操作,如果你对其相关的实际操作兴趣了解的话,以下的文章将会给你提供相关的知识。打开Oracle游标使用游标中的值之前应该首先dewengz打开...
  • oracle 游标循环

    2021-05-07 12:54:39
    Oracle基础 游标原文:Oracle基础 游标一、游标游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。为了处理SQL语句,Oracle将在内存中分配一个...
  • 无法在不打开记录的情况下检查光标是否返回记录.(见here)所以你可以一些快速查询只是为了查看是否有记录(例如使用count),或者,你可以这样做:CREATE OR REPLACE PROCEDURE SP_EMPLOYEE_LOOKUP_BY_EMP_ID(IN_USER_...
  • oracle通过游标数据

    2021-05-03 03:49:48
    CREATE OR REPLACE PACKAGE PKG_DNBILL ISTYPE PC_... -- 定义结果集返回值类型/*导入钱清除数据*/PROCEDURE PRO_CLEARIMPORT(PS_KEY VARCHAR2,PS_DN_NO VARCHAR2,PC_RESULT OUT PC_RESULT);END PKG_DNBILL;CREATE ...
  • 应用场景:因为Oracle数据库中的数据涉及机密信息,希望一次性能删除掉...见下图操作办法:直接将下面的脚本内容复制到PQSQL中执行即可--Oracle使用游标删除所有用户数据表中的所有记录脚本declare mystring NVARCHAR...
  • oracle 游标判空步骤

    2021-05-02 04:04:12
    oracle 游标判空方法create or replace package TAL_TEST isTYPE myCursorType IS REF CURSOR;--测试空游标PROCEDURE p_testEmptyCursor;end TAL_TEST;create or replace package body TAL_TEST is--测试空游标...
  • --1 显示游标declare cursor v_sc1 isselect sendnum,registedate from user_info t for update of t.userlevel,nicheng nowait; --of 后面可以多个变量n_level number;n_sendnum number;d_registedate date;beginn_...
  • NULL 博文链接:https://yuhuiblog695685688425687986842568269.iteye.com/blog/2424995
  • 应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select 逗号隔开的字段名列表from字符串等场合。查询结果输出如下:当前数据表TB_UD_USER的字段列表字符串为AH,...
  • 慕婉清6462132CREATE DEFINER=`root`@`%` PROCEDURE `insertPresale`()BEGIN #Routine body goes here... DECLARE done INT ... /*用于判断是否结束循环*/ DECLARE goodsId VARCHAR(255);#标记商品id DECLARE fla...
  • Android 游标

    2019-09-26 17:06:07
     主要在活动中的oncreate方法中,查询数据库返回一个游标cursor,然后通过if判断游标位置是否存在,里面就具体操作UI界面了,也就是使用游标中的数据填充视图。    7.注意点  在oncreate()方法的结尾,注意...
  • 今天接到同事的一个任务,让我把开发用户(pd_zh_cn)下的某个表的数据筛选一部分,倒进测试用户(pdtest_zh_cn)下的相应表中, 筛选条件有点恶心,第一步先从产品分类表里面选出所有2级分类对应的id号。共有172个SQL>...
  • 游标数据练习java

    2021-03-05 16:15:26
    //===============================================================生成游标的方法List menu=new ArrayList();Map param = new HashMap();param.put("usr_no", edb.getData("usr_no"));edb.setData("tx_cd_first",...
  • mysql游标用于遍历处理数据集1 应用场景应用场景 1 应用场景 项目版本更迭后,以前的数据库保存的是二级行业信息的行业id industry_id,现在需要保存一级行业的行业id. 这就导致,我需要遍历fgmp_chatbot中的所有行业...
  • DECLARE done INT DEFAULT 0; // 设置未结束标志 // ... // 执行 sql // ... DECLARE CONTINUE HANDLER FOR NOT FOUND SET done =...// 先判断是否结束 IF done THEN LEAVE data_rel; END IF; // 判断多一次 IF...
  • 判断游标是否处于开启状态

    千次阅读 2009-04-30 12:40:00
    --查看游标select * from master.dbo.syscursors where status1--帮助--参数1 游标名--参数2 游标类型报告当前为连接打开的服务器游标的属性。语法 sp_cursor_list [ @cursor_return = ] cursor_variable_name ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,099
精华内容 25,239
关键字:

判断游标是否有数据