当前位置:首页 » 编程语言 » sql声明游标
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql声明游标

发布时间: 2022-01-23 14:49:23

sql中游标的定义是什么

游标详细说明 RS.OPEN SQL,CONN,A,B 参数A为设定游标的类型,其取值为: 0 仅向前游标,只能向前浏览记录,不支持分页、Recordset、BookMark 1 键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark 2 动态游标功能最强,但耗资源也最多。用户对记录所做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览。 3 静态游标,只是数据的一个快照,用户对记录所做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动 参数B为记录集的锁定类型,其取值为: 1 锁定类型,默认的,只读,不能作任何修改 2 当编辑时立即锁定记录,最安全的方式 3 只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等 4 当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的 打开数据记录集方法其实不止一种,但是我们用的最多的就是 rs.open sql,1,1的方法,可是后面的数字参数很多人不解其意,下面我们来介绍一下。 其实open方法后面有多个参数 CursorType LockType CommandType 比如 rs.open sql,1,1 也可以写成 rs.cursorType = 1 rs.LockType = 1 rs.open sql 其中CursorType代表从一个表或者一个SQL查询结果返回的记录。 这个参数有四个值分别是: adOpenForwardOnly 表示只允许在记录集内的记录间往前移动。这个是缺省值。 adOpenKeyset 反映由其它用户所做的对记录的改变或者删除动作,但并不反映由其它用户做作的添加新记录的动作。 adOpenDynamic 反映由其它用户所做的对记录的改变或者删除动作,包括添加的新记录 adOpenStatic 不反映其它用户对记录所做的修改,添加,删除动作。 这四个值VBSCRIPT预定义位 adOpenForwardOnly = 0 adOpenKeyset = 1 adOpenDynamic = 2 adOpenStatic = 3 lockType 表示当打开记录集时,数据提供者用于锁定数据库的类型: adLockReadOnly 数据不能改变,这是缺省值! adLockPessimistic 数据提供者在开始编辑数据的时候锁定记录 adLockOptimistic 仅当调用update方法时,数据提供者锁定记录 adLockBatchOptimistic 用于批处理修改 他们的常量值定义分别是: adLockReadOnly = 1 adLockPessimistic = 2 adLockOptimistic = 3 adLockBatchOptimistic = 4 rs.open sql,conn,1,1 读取记录 select rs.open sql,conn,1,3 只更新记录最好 update rs.open sql,conn,2,3 插入和删除最好 insert delete

② sql游标的写法

给你一个游标的写法。
此demo的目地是将游标行的name更新到另一张表的字段中条件是2张表的ID相同

Declare@Idvarchar(20)
Declare@Namevarchar(20)
DeclareCurCursorFor
selectid,namefromtemp1
OpenCur
FetchnextFromCurInto@Id,@Name
While@@fetch_status=0
Begin
UpdatetempSet[c3]=@Namewhere[id]=@Id
FetchNextFromCurInto@Id,@Name
End
CloseCur
DeallocateCur

③ Oracle下如何用sql创建游标

For 循环游标

(1)定义游标

(2)定义游标变量

(3)使用for循环来使用这个游标

declare
--类型定义
cursorc_job
is
selectempno,ename,job,sal
fromemp
wherejob='MANAGER';
--定义一个游标变量v_cinfoc_emp%ROWTYPE,该类型为游标c_emp中的一行数据类型
c_rowc_job%rowtype;
begin
forc_rowinc_jobloop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
endloop;
end;

Fetch游标

使用的时候必须要明确的打开和关闭

declare
--类型定义
cursorc_job
is
selectempno,ename,job,sal
fromemp
wherejob='MANAGER';
--定义一个游标变量
c_rowc_job%rowtype;
begin
openc_job;
loop
--提取一行数据到c_row
fetchc_jobintoc_row;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound是false
--取不到值c_job%notfound是true
exitwhenc_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
endloop;
--关闭游标
closec_job;
end;

④ SQL游标如何使用

A. 在简单的游标中使用 FETCH
下例为 authors 表中姓以字母 B 开头的行声明了一个简单的游标,并使用 FETCH NEXT 逐个提取这些行。FETCH 语句以单行结果集形式返回由 DECLARE CURSOR 指定的列的值。

USE pubs
GO
DECLARE authors_cursor CURSOR FOR
SELECT au_lname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname

OPEN authors_cursor

-- Perform the first fetch.
FETCH NEXT FROM authors_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM authors_cursor
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

au_lname
----------------------------------------
Bennet
au_lname
----------------------------------------
Blotchet-Halls
au_lname
----------------------------------------

B. 使用 FETCH 将值存入变量
下例与上例相似,但 FETCH 语句的输出存储于局部变量而不是直接返回给客户端。PRINT 语句将变量组合成单一字符串并将其返回到客户端。

USE pubs
GO

-- Declare the variables to store the values returned by FETCH.
DECLARE @au_lname varchar(40), @au_fname varchar(20)

DECLARE authors_cursor CURSOR FOR
SELECT au_lname, au_fname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.

FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

-- Concatenate and display the current values in the variables.
PRINT "Author: " + @au_fname + " " + @au_lname

-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

Author: Abraham Bennet
Author: Reginald Blotchet-Halls

C. 声明 SCROLL 游标并使用其它 FETCH 选项
下例创建一个 SCROLL 游标,使其通过 LAST、PRIOR、RELATIVE 和 ABSOLUTE 选项支持所有滚动能力。

USE pubs
GO

-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

-- Declare the cursor.
DECLARE authors_cursor SCROLL CURSOR FOR
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Fetch the last row in the cursor.
FETCH LAST FROM authors_cursor

-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM authors_cursor

-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM authors_cursor

-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM authors_cursor

-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM authors_cursor

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

au_lname au_fname
---------------------------------------- --------------------
Bennet Abraham
Blotchet-Halls Reginald
Carson Cheryl
DeFrance Michel
del Castillo Innes
Dull Ann
Green Marjorie
Greene Morningstar
Gringlesby Burt
Hunter Sheryl
Karsen Livia
Locksley Charlene
MacFeather Stearns
McBadden Heather
O'Leary Michael
Panteley Sylvia
Ringer Albert
Ringer Anne
Smith Meander
Straight Dean
Stringer Dirk
White Johnson
Yokomoto Akiko

au_lname au_fname
---------------------------------------- --------------------
Yokomoto Akiko
au_lname au_fname
---------------------------------------- --------------------
White Johnson
au_lname au_fname
---------------------------------------- --------------------
Blotchet-Halls Reginald
au_lname au_fname
---------------------------------------- --------------------
del Castillo Innes
au_lname au_fname
---------------------------------------- --------------------
Carson Cheryl

⑤ sql sever怎么创建游标

一、下面是一个使用游标的简单例子,有SQL基本知识的朋友不难看懂:


--申明一个游标
DECLAREMyCursorCURSOR
FORSELECTTOP5FBookName,FBookCodingFROMTBookInfo

--打开一个游标
OPENMyCursor

--循环一个游标
DECLARE@BookNamenvarchar(2000),@BookCodingnvarchar(2000)

FETCHNEXTFROMMyCursorINTO@BookName,@BookCoding
WHILE@@FETCH_STATUS=0
BEGIN
print'name'+@BookName
FETCHNEXTFROMMyCursorINTO@BookName,@BookCoding
END

--关闭游标
CLOSEMyCursor
--释放资源
DEALLOCATEMyCursor


二、提示的是,多数情况下,游标可以用临时表代替,个人建议使用临时表,因为游标对系统性能消耗要大。

⑥ PL/SQL中如何声明及使用动态游标

oracle动态游标问题: 游标查询的内容是 动态生成的,然后里面具体有多少个字段没办法事先知道,而动态游标赋值一定要用fetch到一个变量,有没办法把动态游标内容赋值到一个记录集或者表中,而这个表的字段和记录集字段是没办法预先定义好的,而是通过系统动态生成的!
具体例子如下:declare-- Local variables here
v_sql VARCHAR2(1024);
cur SYS_REFCURSOR;
v_column VARCHAR2(1024);
v_exe VARCHAR2(1024);begin---v_sql 是通过一连串的复杂逻辑程序生成的动态内容的 在这里就简单写了
v_sql:='select C_001,b_002,d_003 ..../*具体有多少个字段没办法事先知道*/from table1,table2 .../*具体有多少个字段没办法事先知道*/tablen where 1=1 and /*复杂条件*/';
v_column:= 'C_001+b_002/d_003';--这个变量也是通过复杂的逻辑生成的 没办法事先知道的 但是这里的字段都在 v_sql 中有
v_column := replace(replace(REPLACE(v_column,'b_','c.b_'),'c_','c.c_'),,'c_','c.d_');
FOR i IN 1..e_table(i);
v_exe:='INSERT INTO table_a SELECT'|| v_column||' FROM al' ; /*这里的动态生成的*/!

⑦ sql中的游标是什么怎样用呢

在数据库中,游标提供了一种对从表中检索出的数据进行操作的灵活手段。就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
游标总是与一条SQL
选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。
游标关于数据库中的操作会对整个行集产生影响。由 SELECT 语句返回的行集包括所有满足该语句 WHERE 子句中条件的行。由语句所返回的这一完整的行集被称为结果集。
应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的结果集扩展。
(7)sql声明游标扩展阅读:
游标通过以下方式扩展结果处理:
1.允许定位在结果集的特定行。
2.从结果集的当前位置检索一行或多行。
3.支持对结果集中当前位置的行进行数据修改。
4.为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。
5.提供脚本、存储过程和触发器中使用的访问结果集中的数据的 Transact-SQL 语句。
参考资料来源:搜狗网络—游标

⑧ sql中怎么定义游标啊

楼主,看网络文库http://wenku..com/view/31711f05cc1755270722088b.html

⑨ sql语言定义游标时加不加scroll有什么区别

游标一般用于把通过脚本得到的结果集的内容在用于其它的SQL语句中。但是游标执行会影响脚本执行速度,所以使用时请慎重。 在存储过程或触发器中使用 SQL 游标的典型过程为: 声明SQL 变量包含游标返回的数据。为每个结果集列声明一个变量。

⑩ 在SQL Server中,怎样声明才不是只读(read only)游标

尽管以前连过,这次仍花费了N多时间查资料,配置,现在把详细步骤贴给大家,分享之。

一,JDBC-ODBC桥的方法,这种方法最简单了。

1,新建一个数据库,为student吧,再在其中新建一张表命名为info,添加一些数据(方便观察效果),下面我们配置数据源
开始----控制面板----管理工具----数据源-----添加----选中“SQL Server”----完成
把默认的数据库改为student。点“下一步”----完成----“测试数据源”,如果提示成功,OK,数据源配置好了!代码如下:import java.sql.*;

public class q
{
public static void main(String[] args)
{
String sql;
Connection conn;
Statement stmt;
ResultSet rs;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:student";
String user="sa";
String password="";
conn= DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
sql="select * from info";
rs=stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}编译运行如图:上面的结果是我info里面的字段。OK?成功了吧?二,JDBC连接1,下载jdbc:
下载:SQL Server 2000 SP3,同样到Microsoft的网站去下载升级包,~~~~~~~~~~~~~~~~~~关键开始~~~~~~~~~~~~~~~~~~~~,下载其中的chs_sql2ksp3.exe,注意下载下来的是chs_sql2ksp3.exe文件,双击它选择安装到一个目录时是在解压,然后你还要到那个目录下双击setup.bat批处理文件才是开始安装(应该说是升级)!!!具体下载地址是:
~~~~~~~~~~~~~~~~~~~~关键结束~~~~~~~~~~~~~~~~~~~~~~~~~注:我一直是这个原因,装错补订了,我曾经装过SP3a,SP4,结果都不行!2,安装JDBC,把其安装目录下的lib下的三个文件添加到classpath中,这个网上都有很多。我的是:C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msbase.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\mssqlserver.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msutil.jar;添加完成后,安装SP3补订,也就是刚才下的那个文件,可能需要重启,我给忘了。3,现在就是代码了,如下:import java.sql.*;public class L
{
public static void main(String[] args)
{
String sql;
Connection conn;
Statement stmt;
ResultSet rs;
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=student";
String user="sa";
String password="";
conn= DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
sql="select * from info";
rs=stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}