当前位置:首页 » 编程语言 » 执行sql语句游标不能共享原因
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

执行sql语句游标不能共享原因

发布时间: 2022-05-30 08:24:57

sql游标怎么用

例子
table1结构如下
id int
name varchar(50)

declare @id int
declare @name varchar(50)
declare cursor1 cursor for --定义游标cursor1
select * from table1 --使用游标的对象(跟据需要填入select文)
open cursor1 --打开游标

fetch next from cursor1 into @id,@name --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中

while @@fetch_status=0 --判断是否成功获取数据
begin
update table1 set name=name+'1'
where id=@id --进行相应处理(跟据需要填入SQL文)

fetch next from cursor1 into @id,@name --将游标向下移1行
end

close cursor1 --关闭游标
deallocate cursor1

㈡ 关于SQL SERVER 的游标问题

你这段程序真的很有问题
第一,UPDATE S SET SDEPT='计算机' WHERE @NATION='东阳' 这里@NATION是变量不是字段,当@NATION='东阳'就把表里面的数据全部都改了
第二,要实现你的要求只需要一条Update语句就可以了:
UPDATE S SET SDEPT='计算机' WHERE NATION='东阳'
根本不需要使用游标

㈢ 失败原因:执行SQL失败,失败原因:批处理中出现错误: ORA-00911: invalid character

  1. 应该是错误输入了全角字符,输入半角字符就行了。

  2. 错误信息ORA-00911: invalid character说明了在执行的SQL语句中出现了无效字符,所在SQL语句无法通过语法分析过程导致了错误结果。

  3. 可能出现的原因有:错误地输入了全角字符,比如输入了全角逗号。

  4. 如果使用C++、Java、C#等编程时,总会习惯在语句最后加分号,而这个符号在SQL中是无效字符。

  5. 实际语句和列类型不匹配,比如将数值列赋值为字符串。

  6. 与display函数不同,display_cursor显示的为真实的执行计划。

  7. 对于format参数,使用与display函数的各个值,同样适用于display_cursor函数。

  8. 当statistics_level为all或使用gather_plan_statistics提示可以获得执行时的统计信息。

  9. 根据真实与预估的统计信息可以初步判断SQL效率低下的原因,如统计信息的准确性、主要的开销位于那些步骤等。

  10. 看你的sql语句最后是否有分号,有的话去掉就行 看你Oracle服务器端字符集是否和Oracle客户端字符集匹配。

  11. 查询oracle server端的字符集:SQL>select userenv(‘language’) from al。

  12. 查询oracle client端的字符集。在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。

  13. 还可以在dos窗口里面自己设置,比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK。

㈣ SQL数据库局域网共享

可以用ODBC来解决。
ODBC(Open Database Connectivity,开放数据库互连)是微软公司开发的一套开放数据库系统应用程序接口规范,目前它已成为一种工业标准,它提供了统一的数据库应用程序编程接口(API)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

SQL语言提供了两种不同的使用方式。一种是在终端交互式方式下使用,另一种是将SQL语言嵌入到某种高级语言如PL/1、COBOL、FORTRAN、C中使用,利用高级语言的过程性结构来弥补SQL语言在实现复杂应用方面的不足,这种方式下使用的SQL语言称为嵌入式SQL(Embedded SQL),而嵌入SQL的高级语言称为主语言或宿主语言。

对宿主型数据库语言SQL,DBMS可采用两种方法处理,一种是预编译,另一种是修改和扩充主语言使之能处理SQL语句。目前采用较多的是预编译的方法。即由DBMS的预处理程序对源程序进行扫描,识别出SQL语句,把它们转换成主语言调用语句,以使主语言编译程序能识别它,最后由主语言的编译程序将整个源程序编译成目标码。

三、 实验内容:

一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。

一个完整的ODBC由下列几个部件组成:应用程序、ODBC管理器、驱动程序管理器(Driver Manager)、ODBC API、ODBC 驱动程序、数据源。

下面我们在前面实验建立的数据库的基础上,配置相应的ODBC数据源。具体步骤如下:

1、通过程序—>设置—>控制面板—>管理工具—>点击数据源图标,出现ODBC数据源管理器对话框,点击系统DSN选项卡,添加系统数据源。

2、选择SQL SERVER的驱动

3、建立一个数据源名为ds,服务器:HP或(202.201.224.123)的数据源。

4、SQL SERVER登录验证方式采用输入登录ID和密码的SQL SERVER验证

登录ID和密码均为:你的登录名和密码

5、默认数据库指定为你所在班级的数据库名

6、如下图,这里使用默认选项,不做改动

7、出现如下图所示:点击测试数据源,验证是否成功。

8、测试结果会出现在下图所示的对话框中:

如测试成功,点击确定,名为ds的数据源就建立好了。

这里将结合配置好的数据源,给出一个用Visual Basic连接SQL SERVER2000的实例:即创建一个客户或前端数据库应用程序,并在窗体中添加 ADO Data 控件,以及其它所需要的任何 Visual Basic 控件。可以根据您的需要在窗体中放置多个 ADO Data 控件。

这里先介绍一下有关ADO Data 控件的内容:

ADO Data 控件使用 Microsoft ActiveX 数据对象(ADO) 来快速建立数据绑定的控件和数据提供者之间的连接。数据绑定控件是任何具有“数据源”属性的控件。数据提供者可以是任何符合 OLE DB 规范的数据源。使用Visual Basic 的类模块也可以很方便地创建子集的数据提供者。尽管可以在应用程序中直接使用 ActiveX 数据对象,但 ADO Data 控件有作为一个图形控件的优势(具有“向前”和“向后”按钮),以及一个易于使用的界面,使您可以用最少的代码创建数据库应用程序。在 Visual Basic 的“工具箱”中,不少控件都可以作为数据绑定的控件,包括复选框、组合框、图像、标签、列表框、图片框以及文本框控件等。此外,Visual Basic 还包括了若干种数据绑定的 ActiveX 控件,诸如DataGrid、DataCombo、Chart以及 DataList 控件等。用户也可以创建自己的数据绑定的 ActiveX 控件,或从其他开发商购买控件。

Visual Basic以前的版本提供了内在的 Data 控件和 Remote Data 控件(RDC) 来进行数据访问。这两种控件仍包括在 Visual Basic 中,以提供向后兼容。不过,因为 ADO 的适应性更广,因此建议用户使用 ADO Data 控件来创建新的数据库应用程序。

ADO DATA可能的用法

l 连接一个本地数据库或远程数据库。

l 打开一个指定的数据库表,或定义一个基于结构化查询语言 (SQL) 的查询、或存储过程、或该数据库中的表的视图的记录集合。

l 将数据字段的数值传递给数据绑定的控件,可以在这些控件中显示或更改这些数值。

l 添加新的记录,或根据对显示在绑定的控件中的数据的任何更改来更新一个数据库。

创建一个简单的前端数据库应用程序:

1、打开Visual Basic,创建一个标准工程(standard exe)。

2、在窗体上放置一个 ADO Data 控件 (该图标的工具提示为 "ADODC"),如果该控件不在“工具箱”中,请按 CTRL+T 键,显示“部件”对话框。在这个“部件”对话框中,单击“Microsoft ADO Data Control”,再单击“应用”。

2. 在“工具箱”中,单击选定“ADO Data控件”。就建立了一个名为Adodc1的ADO Data控件,然后按 F4 键显示“属性”窗口。

3. 在“属性”窗口中,单击“ConnectionString”,在它的有侧将显示 图标。

4. 在“属性”窗口中,将“RecordSource”属性设置为一个 SQL 语句。例如:SELECT * FROM Departemnt .

ADO Data控件属性设置:

属性
属性值

ConnectionString
DSN=ds

CommandType
8-adCmdUnknown

RecordSource
SELECT * FROM Department

5.在窗体上放置一个“标签”控件,显示说明内容。

6.在窗体上再放置一个“文本框”控件,用来显示数据库信息。

7. 在其“属性”窗口中,将 Text1 的“DataSource”属性设为 ADO Data 控件的名称 (ADODC1)。这样就将这个文本框和 ADO Data 控件绑定在一起。

8. 在其“属性”窗口中,单击“DataField”将下拉得到一个可用的字段列表。单击所要显示的字段的名称。

控件名
属性
属性值

Text1
DataSource
Adodc1

DataField
要显示的字段名

9. 对希望访问的其它每个字段重复第 5、6、7、8 步。

10.按 F5 键运行该应用程序。用户可以在 ADO Data 控件中使用四个箭头按钮,从而允许用户到达数据的开始、记录的末尾或在数据内从一个记录移动到另一个记录。

SQL语言与主语言具有不同数据处理方式。SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录。而主语言是面向记录的,一组主变量一次只能存放一条记录。所以仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求,为此嵌入式SQL引入了游标的概念,用游标来协调这两种不同的处理方式。游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。

使用游标在需要一行一行处理时,游标十分有用。游标可以打开一个结果集合,并提供在结果集中一行一行处理的功能。下面的例子给出了一个利用游标来查询指定学号的学生所选修的课程成绩。

引自:http://www.nx5127.com/863.html

㈤ Delphi执行SQL游标的奇怪问题!

delphi 一般是给 sql server 下的指令,然后sql 进行执行,然后获取你想要的结果,你用的是BDE还是ADO 建议你用下ADO试试!

㈥ 这个存储过程游标为什么不能执行sql语句

用dbms_sql实现吧,参考下面语句
declare
v_cursorid number;
v_selectrecords varchar2(500);
v_numrows integer;
v_mynum integer;
v_mytext varchar(50);
begin
v_cursorid := dbms_sql.open_cursor;
v_selectrecords := 'select * from mytable';
dbms_sql.parse(v_cursorid,v_selectrecords,dbms_sql.native);
dbms_sql.define_column(v_cursorid,1,v_mynum);
dbms_sql.define_column(v_cursorid,2,v_mytext,50);
v_numrows := dbms_sql.execute(v_cursorid);
loop
if dbms_sql.fetch_rows(v_cursorid)=0 then exit;
end if;
dbms_sql.column_value(v_cursorid,1,v_mynum);
dbms_sql.column_value(v_cursorid,2,v_mytext);
dbms_output.put_line(v_mynum||' '||v_mytext);
end loop;

dbms_sql.close_cursor(v_cursorid);
end;

㈦ sql server 新建查询创建游标后,为什么再次新建查询打开游标,提示名为 'x' 的游标不存在

游标的作用域最高为连接级:在同一个连接上,可以共用游标,连接断开,游标清除。
如果建立游标时指定【local】关键字,则在定义它的代码段(或过程/函数/触发器)执行完后释放。
在SSMS中,每一个查询窗口,都是独立的连接,所以不能共用同一个游标。

㈧ SQL中的指针和游标怎么理解

windows或DOS的“光标”不同,MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行的指针。
游标为您提供了在逐行的基础上而不是一次处理整个结果集为基础的操作表中数据的方法。 1.如何使用游标 1)定义游标语句 Declare <游标名> Cursor For
2)创建游标语句 Open <游标名>
3)提取游标列值、移动记录指针 Fetch <列名列表> From <游标名> [Into <变量列表>]
4)使用@@Fetch_Status利用While循环处理游标中的行
5)删除游标并释放语句 Close <游标名>/Deallocate <游标名>
6)游标应用实例 --定义游标
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
--创建游标
Open cur_Depart
--移动或提取列值
Fetch From cur_Depart into @DeptID,@DeptName
--利用循环处理游标中的列值
While @@Fetch_Status=0
Begin
Print @DeptID,@DeptName
Fetch From cur_Depart into @DeptID,@DeptName
End
--关闭/释放游标
Close cur_Depart
Deallocate cur_Depart2.语句的详细及注意 1)定义游标语句 Declare <游标名> [Insensitive] [Scroll] Cursor
For <Select 语句> [FOR {Read Only | Update [ OF <列名列表>]}] Insensitive DBMS创建查询结果集数据的临时副本(而不是使用直接引用数据库表中的真实数据行中的列)。游标是Read Only,也就是说不能修改其内容或底层表的内容; Scroll 指定游标支持通过使用任意Fetch 选项(First Last Prior Next Relative Absolute)选取它的任意行作为当前行。如果此项省略,则游标将只支持向下移动单行(即只支持游标的Fetch Next); Select语句 定义游标结果集的标准 SELECT 语句。在游标声明的 <Select语句>内不允许使用关键字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO; Read Only 防止使用游标的用户通过更新数据或删除行改变游标的内容; Update 创建可更新游标且列出值能被更新的游标列。如果子句中列入了任意列,则只有被列入的列才能被更新。如果Declare Cursor语句中只指定的UPDATE(没有列名列表),则游标将允许更新它的任何或所有列。
Declare cur_Depart Cursor
For Select * From Department For Update OF cDeptID,cDeptName 2)提取游标列值、移动记录指针语句 Fetch [Next | Prior | First | Last | {Absolute <行号>} | {Relative <行号>}]
From <游标名> [Into <变量列表……>] 每次执行Fetch语句时,DBMS移到游标中的下一行并把游标中的列值获取到Into中列出的变量中。因此Fetch语句的Into子句中列出的变量必须与游标定义中Select 语句中的列表的类型与个数相对应; 仅当定义游标时使用Scroll参数时,才能使用Fetch语句的行定位参数(First Last Prior Next Relative Absolute);如果Fetch语句中不包括参数Next | Prior | First | Last,DBMS将执行默认的Fetch Next; Next 向下、向后移动一行(记录); Prior 向上、向前移动一行(记录); First 移动至结果集的第一行(记录); Last 移动至结果集的最后一行(记录); Absolute n 移动到结果集中的第n行。如果n是正值,DBMS从结果集的首部向后或向下移动至第n行;如果n是负数,则DBMS从结果集的底部向前或向上移动n行;
Fetch Absolute 2 From cur_Depart Into @DeptID,@DeptName Relative n 从指针的当前位置移动n行。如果n是正值,DBMS将行指针向后或向下移动至第n行;如果n是负数,则DBMS将行指针向前或向上移动n行;
Fetch Relative 2 From cur_Depart Into @DeptID,@DeptName 3)基于游标的定位DELETE/UPDATE语句 如果游标是可更新的(也就是说,在定义游标语句中不包括Read Only 参数),就可以用游标从游标数据的源表中DELETE/UPDATE行,即DELETE/UPDATE基于游标指针的当前位置的操作;
举例: --删除当前行的记录
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
Open cur_Depart
Fetch From cur_Depart into @DeptID,@DeptName
Delete From Department Where CURRENT OF cur_Depart --更新当前行的内容
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department into @DeptID,@DeptName
Open cur_Depart
Fetch From cur_Depart into @DeptID,@DeptName
Update Department Set cDeptID=’2007’ + @DeptID Where CURRENT OF cur_Depart3.游标使用技巧及注意 1)利用Order By改变游标中行的顺序。此处应该注意的是,只有在查询的中Select 子句中出现的列才能作为Order by子句列,这一点与普通的Select语句不同;
2)当语句中使用了Order By子句后,将不能用游标来执行定位DELETE/UPDATE语句;如何解决这个问题,首先在原表上创建索引,在创建游标时指定使用此索引来实现;例如:
Declare cur_Depart Cursor
For Select cDeptID,cDeptName From Department With INDEX(idx_ID)
For Update Of cDeptID,cDeptName
通过在From子句中增加With Index来实现利用索引对表的排序;
3)在游标中可以包含计算好的值作为列;
4)利用@@Cursor_Rows确定游标中的行数;

㈨ SQL中关于游标的问题

--一般游标分定义,打开,读取,关闭和释放几个步骤
--1.定义变量,用来保存游标读取的数据
DECLARE@IDINT
--2.定义游标
DECLARECurCURSORFOR
SelectidFrom表
--3.打开游标
OPENCur
--4.循环读取
FETCHNEXTFROMCurINTO@ID
WHILE@@FETCH_STATUS=0
BEGIN
--要做的事
FETCHNEXTFROMCurINTO@ID
END
--5.关闭游标
CLOSECur
--6.释放游标
DEALLOCATECur

㈩ MS SQL关于使用触发器和游标同步更新数据的问题

我这边执行你的存储过程操作是可以进行更新的,不知道你更新不了具体错误是什么?

修改前初始数据

最后,值得注意的是,定义decimal类型时最好带上精度,不然会出现四舍五入的情况,declimal默认指的是decimal(18,0)