在teradata更新游标?

时间:2016-02-10 15:19:02

标签: teradata plsqldeveloper

这是我在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;

2 个答案:

答案 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;