sql第九章简答题_sql语句declare用法

sql第九章简答题_sql语句declare用法文章目录第二十六章SQL命令DECLARE大纲参数描述游标名称通过游标更新示例第二十六章SQL命令DECLARE声明游标大纲DECLAREcursor-nameCURSORFORquery参数cursor-name-游标的名称,必须以字母开头,并且仅包含字母和数字。(游标名称不遵循SQL标识符约定)。游标名称区分大小写。它们受其他命名限制的约束,如下所述。query-定义游标结果集的标准SELECT语句。此选择可以包括%NOFPLAN关键字,以指定应忽略此查询的

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

文章目录



第二十六章 SQL命令 DECLARE

声明游标

大纲

DECLARE cursor-name CURSOR FOR query

参数

  • cursor-name – 游标的名称,必须以字母开头,并且仅包含字母和数字。(游标名称不遵循SQL标识符约定)。游标名称区分大小写。它们受其他命名限制的约束,如下所述。
  • query – 定义游标结果集的标准SELECT语句。此选择可以包括%NOFPLAN关键字,以指定应忽略此查询的冻结计划(如果有)。此SELECT可以包括ORDER BY子句,可以带有或不带有TOP子句。此SELECT可以在FROM子句中指定表值函数。

描述

DECLARE语句声明在基于游标的嵌入式SQL中使用的游标。声明游标后,可以发出OPEN语句来打开游标,然后发出一系列FETCH语句来检索各个记录。游标定义SELECT查询,该查询用于选择要由这些FETCH语句检索的记录。可以发出一条CLOSE语句来关闭(但不是删除)游标。

作为SQL语句,仅嵌入式SQL支持DECLARE。对于动态SQL,可以使用简单的SELECT语句(不带INTO子句),也可以使用动态SQL和嵌入式SQL的组合。使用ODBC API通过ODBC支持等效操作。

DECLARE声明只进(不可滚动)游标。提取操作从查询结果集中的第一条记录开始,并按顺序遍历结果集记录。一次提取只能提取一次记录。下一次提取将获取结果集中的下一条连续记录。

因为DECLARE是一个声明,而不是执行的语句,所以它不设置或终止SQLCODE变量。

游标名称

游标名称区分大小写。

游标名称在例程和相应类中必须是唯一的。游标名称可以是任意长度,但在前29个字符内必须是唯一的。游标名称区分大小写。如果已声明指定的游标,编译将失败,并显示SQLCODE-52错误,游标名称已声明。

游标名称不是特定于命名空间的。可以在一个命名空间中声明游标,并在另一个命名空间中打开、获取或关闭此游标。在执行OPEN命令时编译嵌入式SQL。SQL表和局部变量是特定于名称空间的,因此必须在查询中指定的表所在的同一名称空间中调用OPEN操作(或者能够访问名称空间中的表)。

游标名称的第一个字符必须是字母。游标名称的第二个和后续字符必须是字母或数字。与SQL标识符不同,游标名称中不允许使用标点符号。

可以使用分隔符字符(双引号)将SQL保留字指定为游标名称。分隔游标名称不是SQL分隔标识符;分隔游标名称仍然区分大小写,不能包含标点符号。在大多数情况下,SQL保留字不应用作游标名称。

通过游标更新

可以使用带有WHERE CURRENT OF子句的UPDATEDELETE语句,通过声明的游标执行记录更新和删除。 SQL中,如果对受影响的表和列具有适当的权限,则游标始终可以用于更新或删除操作。

DECLARE语句可以在查询后指定FOR UPDATEFOR READ ONLY关键字子句。这些子句是可选的,不执行任何操作。它们是作为在代码中记录发出查询的进程是否具有所需的更新和删除对象权限的一种方式提供的。

示例

下面的嵌入式SQL示例使用DECLARE为指定两个输出主机变量的查询定义游标。然后,光标被打开、重复读取和关闭:

ClassMethod Declare()
{ 
   
	s name = "John Doe", state = "##"
	&sql(
		DECLARE EmpCursor CURSOR FOR 
			SELECT Name, Home_State
			INTO :name,:state FROM Sample.Person
			WHERE Home_State %STARTSWITH 'A'
		FOR READ ONLY
	)
	w !,"BEFORE: Name = ",name," State = ",state 
	&sql(
		OPEN EmpCursor
	)
	if SQLCODE < 0 { 
   
		w "SQL打开游标错误:",SQLCODE," ",%msg  
		q
	}
	n %ROWCOUNT,%ROWID
	for { 
    
		&sql(
			FETCH EmpCursor
		)
		q:SQLCODE  
		w !,"DURING: Name = ",name," State = ",state 
	}
	w !,"获取状态SQLCODE = ",SQLCODE
	w !,"读取的行数 = ",%ROWCOUNT
	&sql(
		CLOSE EmpCursor
	)
	if SQLCODE < 0 { 
   
		w "SQL关闭游标错误:",SQLCODE," ",%msg  
		q
	} 
	w !,"AFTER: Name = ",name," State = ",state
}

下面的嵌入式SQL示例使用DECLARE为查询定义游标,该查询在INTO子句中指定OUTPUT主机变量,在WHERE子句中指定INPUT主机变量。然后,光标被打开、重复读取和关闭:

ClassMethod Declare1()
{ 
   
	n SQLCODE,%ROWCOUNT,%ROWID
	s EmpZipLow = "10000"
	s EmpZipHigh = "19999"
	&sql(
		DECLARE EmpCursor1 CURSOR FOR
			SELECT Name,Home_Zip
			INTO :name,:zip
			FROM Sample.Employee 
			WHERE Home_Zip BETWEEN :EmpZipLow AND :EmpZipHigh)
	&sql(
		OPEN EmpCursor1
	)
	if SQLCODE < 0 { 
   
		w "SQL打开游标错误:",SQLCODE," ",%msg  
		q
	}
	for { 
    
		&sql(
			FETCH EmpCursor1
		)
		q:SQLCODE  
		w !,name," ",zip 
	}
	&sql(
		CLOSE EmpCursor1
	)
	if SQLCODE < 0 { 
   
		w "SQL关闭游标错误:",SQLCODE," ",%msg  
		q
	}
}

下面的嵌入式SQL示例使用表值函数作为查询的FROM子句:

ClassMethod Declare2()
{ 
   
	s $NAMESPACE="Samples"
	&sql(DECLARE EmpCursor2 CURSOR FOR 
			SELECT Name INTO :name FROM Sample.SP_Sample_By_Name('A')
			FOR READ ONLY
	)
	&sql(
		OPEN EmpCursor2
	)
	if SQLCODE < 0 { 
   
		w "SQL打开游标错误:",SQLCODE," ",%msg  
		q
	}
	n %ROWCOUNT,%ROWID
	for { 
    
		&sql(
			FETCH EmpCursor2
		)
		q:SQLCODE  
		w "Name=",name,! 
	}
	w !,"获取状态SQLCODE = ",SQLCODE
	w !,"读取的行数 = ",%ROWCOUNT
	&sql(
		CLOSE EmpCursor2
	)
	if SQLCODE < 0 { 
   
		w "SQL关闭游标错误:",SQLCODE," ",%msg  
		q
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171236.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚拟 显示器_win7检测不到第二个显示器

    虚拟 显示器_win7检测不到第二个显示器这里写自定义目录标题虚拟显示器概述虚拟显示器原理方案虚拟显示器概述最近因工作需要,需要在物理显卡上虚拟出一个显示器,我是用的操作系统是win7,查询了下官方文档和网络资源,没有现成的框架,所以需要自己研究如何一步步实现。虚拟显示器用途挺多的,我们其实在一些场景中有用到过,比如displaylink,我们网上买的一些USB转HDMI的连接线,在使用过程中我们需要安装displaylink的驱…

    2022年8月21日
    9
  • linux convert 添加文字,Linux convert命令有什么用

    linux convert 添加文字,Linux convert命令有什么用Linuxconvert命令有什么用?Linux强大的图片处理功能强大的convert命令—介绍他的主要原因也是应为编程语言在linux下都可以调用使用convent命令可以对图片进行各种处理-trim:裁剪图像四周空白区域;-transparentcolor:去除图像中指定的颜色;-densitygeometry:设定图像的DPI值,若不明DPI值的概念,可参考《有关pt,p…

    2022年7月16日
    11
  • 2246xt u盘开卡详细教程_电脑重装系统:常规U盘PE装机详细教程~[通俗易懂]

    2246xt u盘开卡详细教程_电脑重装系统:常规U盘PE装机详细教程~[通俗易懂]系统重装:常规U盘PE装机详细教程!一适用条件此方法适用任何情况下的电脑系统新装、重装!8G大小的U盘X1微PE工具箱软件X1微软原版系统镜像文件X1PE系统我这里推荐使用微PE工具箱(优启动、老毛桃、大白菜都可以使用哪个看你自己心情)。在微PE官网下载工具箱安装包,推荐直接下载V2.0版本,支持NVME盘。如果你的…

    2022年6月12日
    30
  • 分布式架构设计之电商平台

    分布式架构设计之电商平台何为软件架构?不同人的答案会有所不同,而我认为一个好的软件架构除了要具备业务功能外,还应该具备一定的高性能、高可用、高伸缩性及可拓展等非功能需求。而软件架构是由业务架构和技术架构两部分组成,因为有了业务结构才会催生出软件架构,进而来满足业务上的需求,所以,在做软件架构设计时,需要分为业务架构设计和技术软件架构设计,二者不可分离哦!那么,接下来就以本人实际工作中的电商平台为例,进行说明电商平台架构设计,因为不同行业产品系统不同业务不同,而催生的系统软件的实现要求及架构设计就不同了!

    2022年6月29日
    24
  • Qt之读写文件

    Qt之读写文件1.思路读写文件的基本操作:读文件写文件打开文件打开文件读取文件写入文件关闭文件关闭文件2.QFile实现读写文件QFile类提供读写文件的接口。它的构造函数如下:QFile(constQString&name)QFile(QObject*parent)QFile(constQString&name,QObject*parent)通过它的构造函数我

    2022年6月2日
    31
  • RewriteCond RewriteRule

    RewriteCond RewriteRule##RulesforTRandEScountrysitesRewriteCond%{REQUEST_URI}^/(tr|es)$[NC]RewriteRule^(.*)https://xx.com[L,R=301]####Rulesfortheoldalias/sam/*RewriteRule^pp/(.*)/xx-p/$1…

    2022年5月27日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号