Sql 使用当前光标更改数据过程
我需要在SQLDeveloper中创建一个过程,可以将数据从一列移动到另一列。这些列位于不同的表中,因此我不知道如何编写代码 我假设使用游标将数据从一列传输到另一列,然后使用current of语句插入到另一列,尽管我不知道如何做,可能需要一些帮助。 我甚至不知道你是怎么做到的。 表1是使用customernumber、first namn、last namne和password构建的 表2只是customernumber和password。 我需要将密码从表2传输到表1Sql 使用当前光标更改数据过程,sql,stored-procedures,cursor,oracle-sqldeveloper,Sql,Stored Procedures,Cursor,Oracle Sqldeveloper,我需要在SQLDeveloper中创建一个过程,可以将数据从一列移动到另一列。这些列位于不同的表中,因此我不知道如何编写代码 我假设使用游标将数据从一列传输到另一列,然后使用current of语句插入到另一列,尽管我不知道如何做,可能需要一些帮助。 我甚至不知道你是怎么做到的。 表1是使用customernumber、first namn、last namne和password构建的 表2只是customernumber和password。 我需要将密码从表2传输到表1 Cursor c_ne
Cursor c_newpass is
select */passwd/cnumbr/cnmbr,passwd -- dont know what to select here --
from customersecurity
for update of --passwd, which is in a column in another table called customer--
那么我应该在这里键入什么
在这之后,你开始这个过程,我不知道接下来要写什么,关于
更新密码
来自客户
其中c_newpass的当前值
我真的不知道,但我知道我写的例子不起作用。但是我假设可以使用一个循环来更新每一行,因为我假设不能同时更新整个列。
如果有人能写出整个过程,我将不胜感激,至少是一个例子,这样我就知道该怎么做了。
谢谢你的帮助 更新:
由于您使用的是Oracle,因此此上的公认答案可能有助于您解决问题
创建光标时,将在现有的两个表之间联接,并指定更新的列(要更新的列)。从这里开始,其中CURRENT OF c_newpass
只是指由与c_newpass关联的FETCH语句处理的最新行
这只是一个粗略的想法,我认为它将如何工作
Cursor c_newpass IS
select customersecurity.password, customersecurity.cnumbr, table1.cnumbr, table1.password
from customersecurity, table1
for update of table1.password
然后,您应该能够循环通过c_newpass,获取下一行并更新表1
Update table1
Set password = password
WHERE CURRENT OF c_newpass
SQL SERVER示例:
它可能不是您所需要的,但它可以向您展示游标是如何工作的,以及它们是如何完成您所需要的。我有两个表,我需要将Foo中的名称传输/复制到Bar中的名称,因为Bar表的起始名称为空。我创建了两个变量,一个用于ID,一个用于name,用于保存游标(someCursor)当前所在位置的内容。设置光标后,需要从中获取项目,即FETCH NEXT
语句,并使用INTO
设置@ID
和@Name
的变量。我通过检查@@Fetch\u Status
来启动while循环,以确保上一条语句成功。如果是这样,我使用刚刚设置的变量来更新Bar表,匹配id并用@Name的内容更新Name列。完成后,我再次使用FETCH next
获取光标中的下一项。假设光标中有另一个项目,并且成功了,它将重新执行
我认为您使用的数据库管理系统与SQL Server不同,但概念应该相似。您将根据customersecurity表创建光标,选择ID和密码,然后根据这些列更新新表
Create Table Foo(
ID int identity primary key,
Name varchar(20)
)
Create Table Bar(
ID int identity primary key,
Name varchar(20)
)
Insert Into Foo Values('ABC')
Insert Into Foo Values('XYZ')
Insert Into Foo Values('JMK')
Insert Into Bar Values(NULL)
Insert Into Bar Values(NULL)
Insert Into Bar Values(NULL)
declare @ID int, @name varchar(20)
Declare someCursor CURSOR FOR
Select ID, Name From Foo order by ID
OPEN someCursor
FETCH NEXT FROM someCursor
INTO @ID, @name
WHILE @@Fetch_Status = 0
BEGIN
Update Bar
Set Name = @Name
Where ID = @ID
FETCH NEXT FROM someCursor
INTO @ID, @name
END
Close someCursor
Deallocate someCursor
select * from Foo
select * from Bar
SQL只是一种查询语言——我们应该知道您使用的是什么具体的数据库(及其版本)——MySQL?博士后?IBM DB2?神谕SQL Server?跨数据库?完全是别的吗?它们都使用SQL,但许多功能都是特定于供应商的。请相应地更新您的标签!谢谢你的解释,我使用的是SQLDeveloper。我还应该使用“current of”语句来完成这项任务。我知道游标是如何工作的,但不知道当前的语句,这就是问题所在。这是一个大学的事情,我在课堂上落后了很多,因为我生病了>。检查我的最新答案。我想我所拥有的可能足以为你指明正确的方向。非常感谢你!我想我现在可以自己完成剩下的事情了:)