这是我在Oracle中使用的SQL块,
现在我需要在Teradata中采用相同的方式,是否可能?我想在Teradata中使用FOR UPDATE CURSOR语法!
你能指导我吗?
declare
cursor c1 is select * from Employees FOR UPDATE;
a number :=0 ;
begin
for x in c1 loop
a := a +1 ;
update employees set salary = a where current of c1;
end loop;
end;
答案 0 :(得分:1)
仅允许在ANSI模式会话中使用可更新游标。
语法非常相似:
declare c1 cursor for
select * from Employees FOR UPDATE;
a number :=0 ;
begin
for x in c1 loop
a := a +1 ;
update employees set salary = a where current of c1;
end loop;
end;
但是游标在像Teradata这样的并行DBMS中表现非常差,因为它们是连续处理的,一行接一行。
几乎在所有情况下,数据上的游标都可以基于集合进行重写(例如,您的示例是一个简单的ROW_NUMBER),然后它们的执行速度会提高几个数量级。
答案 1 :(得分:0)
也许你可以改用它?
UPDATE employees
FROM (
SELECT csum(1,1) new_salary, emp_id
FROM employees
) src
set salary=src.new_salary
where employees.emp_id=src.emp_id;