当前位置: 首页 > 编程日记 > 正文

4GL之Non-SCROLLING CURSOR

在4gl中CURSOR可以说是每一个程序中都会有的,而CURSOR又分为三种SCROLLING CURSOR、Non-SCROLLING CURSOR、LOCKING CURSOR。

Non-SCROLLING CURSOR的聲明有兩種,一種是先定義好sql語句到一個變量里:

DECLARE    cursor名  CURSOR  FROM  變量

另一種是直接將sql語句寫在CURSOR聲明裡面:

DECLARE    cursor名  CURSOR  FOR   SQL語句

抓取資料:FOREACH  cursor名  INTO  變量或者集合或者數組

在循環內可用的控制 [CONTINUE FOREACH][EXIT FOREACH]

END FOREACH

Non-SCROLLING CURSOR抓取到的資料,是放在一個數組內的,因為抓取到的資料是一次一筆資料。每抓取一筆后,再抓第二筆時,由於數組可以定義成二維數組,所以能夠接受到所有資料。

如果是將資料放在變量或者集合內,那麼每次抓取到的資料都會覆蓋掉變量或集合內的值,這種情況只能在循環里將資料取出,否則只會保留最後一筆資料。

總的來說,Non-SCRCOLLING CURSOR的循環類似FOR循環。

以下為廢話

Non-SCROLLING CURSOR通常出現在雙檔控制程序或者報表程序裡面,抓取資料時,可以按次序,一次一筆資料抓取,直到強制終止或全部抓取完畢。Non-SCROLLING CURSOR的循環體為(FOREACH  循環體  END FOREACH),循環體中,常見的都是一些對SQL語句的執行情況的判斷:有判斷SQLCA.SQLCODE、STATUS的值的,還有這種少見的

DECLARE p111_chkdate CURSOR WITH HOLD FOR p111_prechk

LET l_flag='N'

FOREACH p111_chkdate INTO l_yy,l_mm

LET l_flag='Y' EXIT FOREACH

END FOREACH

IF l_falg = 'Y' THEN

CALL cl_err('err: ' , ' 報錯代碼 ',1)  RETURN

END IF

循環體內看出,只抓了一筆資料就設定了變量值,然後退出循環,通過檢查設定的值,產生報錯信息,并退出這段控制。那麼這個CURSOR的意思是從數據庫中抓取資料,若抓出了資料,就報錯,感覺上有點多此一舉。

后腦子抽風,猜想起如果CURSOR沒有抓取到資料,就是說sql語句抓取不到資料,而控制段里面又是用的這種寫法,那麼,循環會執行嗎?

於是:

DATABASE ds
MAIN
    DEFINE l_sql VARCHAR(500)
    DEFINE l_zz01 LIKE zz_file.zz01
    DEFINE l_zz04 LIKE zz_file.zz04
    DEFINE l_flag VARCHAR(2)
    DEFINE l_cnt INTEGER
    DEFINE l_count INTEGER
    LET l_cnt = 1
    LET l_flag = 'N'
    
    select count(*) INTO l_count from zz_file where zz06='2'
    LET l_sql=" SELECT zz01,zz04 ",
              " FROM zz_file ",
              " WHERE zz06='99' ",
              " ORDER BY 1 desc "     #這條語句沒有資料抓取
    PREPARE zz_sql FROM l_sql
    DECLARE zz_cur CURSOR WITH HOLD FOR zz_sql
    FOREACH zz_cur INTO l_zz01,l_zz04
        LET l_flag='Y'
        LET l_cnt=l_cnt+1
        #DISPLAY l_zz01
        EXIT FOREACH
    END FOREACH
    DISPLAY l_count       #123
    DISPLAY l_cnt           #1
    DISPLAY l_flag          #N
    DISPLAY l_zz01         #空
    DISPLAY l_zz04         #空
END MAIN

然後去編譯執行,果然,沒有抓取到資料,是不會執行循環體的;果然每個人有每個人的寫法,但這種有資料就報錯的就沒有必要用cursor來寫了。

转载于:https://www.cnblogs.com/duolaAmengblog/p/8430440.html

相关文章:

项目总结三--波纹视图

波纹视图的使用 代码在github:https://github.com/wyon0313/YGMoireAnimation

vlookup示例_VLOOKUP示例–如何在Excel中执行VLOOKUP

vlookup示例Microsoft Excel includes a variety of different functions that help users with calculations of any kind. The functionality of Excel is so comprehensive that average users dont even take advantage of most utilities.Microsoft Excel包括各种不同的功…

MySQL--从库启动复制报错1236

链接:http://blog.csdn.net/yumushui/article/details/42742461 今天在搭建一个MySQL master-slave集群时,执行了change master命令,然后又 start slave 启动slave服务,结果查看salve状态就出现错误了: mysql> show slave stat…

使用Script元素发送JSONP请求

// 根据指定URL发送一个JSONP请求 //然后把解析得到的相应数据传递给回调函数 //在URL中添加一个名为jsonp的查询参数,用于指定该请求的回调函数的名称 function getJSONP(url, callback){//为本次请求创建一个唯一的回调函数名称var cbnum "cb"getJSONP.counter;va…

iOS 崩溃记录

dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Referenced from: /var/containers/Bundle/Application/AEECAAFB-F14A-43AA-9FB8-8388CAC40122/DouLiao.app/DouLiao Reason: image not found 原因应该是iOS系统版本太…

以太坊Geth几种同步模式

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 以太坊Geth几种同步模式 同步模式分类 –fast Enable fast syncing through state downloads –light Enable light client mode –s…

[转]Membership 到 .NET4.5 之 ASP.NET Identity

本文转自:http://www.cnblogs.com/jesse2013/p/membership-part3.html 我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计。正所谓从实践从来,到实践从去,在我们把Membership的…

js填充select下拉框并选择默认值

/* 使用json数组填充下拉框并复选 *//* 初始化下拉框数据 */ var jsonStr { "data": [] }; for (var str in JsonStr.data) {jsonStr.data.push({ "value": JsonStr.data[str].value, "text": JsonStr.data[str].text }); }/* 调用BandSelectOb…

关于curl使用记录

因经常需要排除线上用户问题,查看用户数据请求结果,使用到curl命令,但是总是忘记,在此做下记录。 curl post请求命令行如下: curl -d "param0value0&param1value1" "url"

智能合约部署及调用

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 智能合约部署及调用 以太坊区块链技术2.0版本对于行业应用的开发最主要特性就是实现了智能合约,本质上讲智能合约是由事件驱…

POP到指定的界面

int index (int)[[self.navigationController viewControllers]indexOfObject:self]; [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:(index -2)] animated:YES];

js markdown chart flow

http://knsv.github.io/mermaid/#example-of-a-marked-renderer转载于:https://www.cnblogs.com/studyNT/p/5584399.html

使用Remix编译和部署以太坊智能合约

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 使用Remix编译和部署以太坊智能合约 Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络…

Java之Array(数组)说明

代码说明: 1 package array;2 3 import java.util.ArrayList;4 import java.util.Arrays;5 import java.util.List;6 7 /**8 * Array使用说明:9 * 内容: 10 * 1、Array实例化; 11 * 2、Array与ArrayList转换; 12 …

创建操作/删除多行数据的UITableView的细节

首先注意需要重写-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 这里需要注意的是返回的结果应该是 return UITableViewCel…

每天进步一点点——Linux

http://blog.csdn.net/cywosp/article/category/443566/1转载于:https://www.cnblogs.com/zengkefu/p/5586780.html

用Go 构建一个区块链 -- Part 5: 地址

链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 比特币地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是史上第一个比特币地址,据说属于…

iOS 9 适配系列教程

转自:http://www.cocoachina.com/ios/20150703/12392.html 本文是投稿文章,作者:ChenYilong(https://github.com/ChenYilong/iOS9AdaptationTips) Demo1_iOS9网络适配_改用更安全的HTTPS iOS9把所有的http请求都改为ht…

AutoMocker单元测试

/// <summary>/// 测试获取所有物流/// </summary>[TestMethod]public void TestExpressController(){var Expresss new List<Express> { new Express{Code"01",Name"测试物流"}}.AsQueryable();var mocker new AutoMocker();mocker.U…

CSS.text不被选中

1、 text{-moz-user-select: none; /*火狐*/-webkit-user-select: none; /*webkit浏览器*/-ms-user-select: none; /*IE10*/-khtml-user-select: none; /*早期浏览器*/-o-user-select: none; /* Opera*/user-select: none;} 2、user-select - CSS3参考手册.html&#xff08;htt…

一个Solidity源文件的布局

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 源文件可以包含任意数量的合约定义&#xff0c;include指令和pragma伪指令。 Pragma 版本 源文件可以&#xff08;并且应该&#xff09;使…

iOS 数字滚动 类似于老 - 虎- 机的效果

效果图 具体实现代码如下 ZCWScrollNumView.h文件 #import <UIKit/UIKit.h>typedef enum {ZCWScrollNumAnimationTypeNone,ZCWScrollNumAnimationTypeNormal,ZCWScrollNumAnimationTypeFromLast,ZCWScrollNumAnimationTypeRand,ZCWScrollNumAnimationTypeFast } ZCWScro…

序列化模块--json模块--pickle模块-shelve模块

什么叫序列化&#xff1f; 序列化是指把内存里的数据类型转变成字符串&#xff0c;以使其能存储到硬盘或通过网络传播到远程&#xff0c;因为硬盘或网络传输时只能接受bytes 例&#xff1a; 把内存数据 转成字符 # data {# roles:[# {role:monster,type:pip,life:5…

UITextView添加占位字符

#import "YGTextView.h"#define kPlaceholderDefaultTopMargin 4 // Placeholder上下间距#define kPlaceholderDefaultLeftMargin 5 // Placeholder左右间距implementation YGTextView#pragma mark - 初始化PlaceholderTextView- (instancetype)initWithFrame…

手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 学习目标 了解智能合约 简单环境搭建 能够利用solidity编写Hello World合约 合约部署 和合约互动 使用solidity语言撰写智能合约 …

洛谷P3159 [CQOI2012]交换棋子

巧妙的拆点方式&#xff0c;首先把1看成黑点&#xff0c;0看成空的&#xff0c;几次交换就可以看成一条路径 1&#xff09;从容量上看&#xff0c;这条路径为1-2-2-2-2-2-……-2-1 2&#xff09;从费用上看&#xff0c;这条路径每条边费用都是1 于是用一种巧妙的拆点方式&#…

趣谈iOS运行时的方法调用原理

一个成熟的计算机语言必然有丰富的体系&#xff0c;复杂的容错机制&#xff0c;处理逻辑以及判断逻辑。但这些复杂的逻辑都是围绕一个主线丰富和展开的&#xff0c;所以在学习计算机语言的时候&#xff0c;先掌握核心&#xff0c;然后了解其原理&#xff0c;明白程序语言设计的…

GCD实现倒计时

__block int timeout59; //倒计时时间dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_source_t _timer dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);dispatch_source_set_timer(_timer,dispatch_wall…

Solidity基础入门知识(十)函数的访问权限和可见性

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 下面来继续介绍作为一个分布式网络语言所特有的internal和external这两种不同的函数调用方式&#xff0c;以及Solidity提供的对函数调用时的…

Sass (Syntactically Awesome StyleSheets)

Sass (Syntactically Awesome StyleSheets) Sass 是对 CSS 的扩展&#xff0c;让 CSS 语言更强大、优雅。 它允许你使用变量、嵌套规则、 mixins、导入等众多功能&#xff0c; 并且完全兼容 CSS 语法。 Sass 有助于保持大型样式表结构良好&#xff0c; 同时也让你能够快速开始小…