UPDATE: 由於您使用的甲骨文,在接受的答案這link可以幫助你弄明白你...
當你創建你的光標,你會之間加入兩個表,並指定更新(要更新的列)。從那裏,WHERE 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例如: 它可能不是你所需要的,但它可以顯示你如何運行遊標以及如何完成你所需要的。我有2個表,我需要將Foo中的名稱傳輸/複製到Bar中的名稱,因爲Bar表具有NULL名稱。我創建了兩個變量,一個用於ID和一個用於保存當前遊標(someCursor)所在位置的名稱。一旦設置了光標,您需要從中獲取FETCH NEXT
聲明中的項目,並使用INTO
設置@ID
和@Name
的變量。我通過檢查@@Fetch_Status
開始一段時間循環,以確保前面的語句成功。如果是這樣,我使用剛設置的變量來更新Bar表,匹配ID並使用@Name的內容更新Name列。一旦完成,我再次使用FETCH NEXT
獲得光標中的下一項。假設光標中有另一個項目,並且它已成功完成,它將再次完成。
我認爲你使用的是與SQL Server不同的DBMS,但這個概念應該是類似的。您將基於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
來源
2013-12-17 16:20:58
JMK
SQL只是查詢語言 - 我們應該知道什麼**具體數據庫**(以及它的哪個版本) - MySQL? Postgres的? IBM DB2?甲骨文? SQL Server? Interbase的?還有其他的東西嗎?他們都使用SQL - 但許多功能都是針對特定供應商的。請相應地更新您的標籤! –