Alterar colunas da tabela

bom dia galera,

Podem me ajudar com uso de cursor?

Estou tentando fazer uma funçao no postgresql para alterar os valores de uma coluna da tabela, mas gostaria de usar um cursor para aprender a lidar com eles.

Tenho uma tabela de empregados que tem como pk empno e uma fk (na mesma tabela emp) é mgr.

Gostaria de alterar os valores da coluna mgr e para isso comecei a fazer a funçao.


[code]CREATE TABLE emp 
( 
  empno int4 NOT NULL, 
  ename varchar(30) NOT NULL, 
  job varchar(30) NOT NULL, 
  deptno int4 NOT NULL, 
  mgr int4); 
 
ALTER TABLE emp 
  ADD CONSTRAINT "PKemp" PRIMARY KEY(empno);[/code]


empno | ename | job | deptno | mgr |
-------±--------±----------±-------±-----+
7839 | KING | P | 10 | |
7698 | BLAKE | M | 30 | 7839 |
7900 | JAMES | CL | 30 | 7698 |
7990 | JOHNSON | S | 30 | 7698 |
7654 | MARTIN | S | 30 | 7698 |
7844 | TURNER | S | 30 | 7900 |

Gostaria de quando solicitar para alterar o diretor (coluna mgr) 7698 para 7900 … alterar todos os valores 7698 para 7900.

[code]CREATE OR REPLACE FUNCTION mudar_diretor(diretor_novo IN INTEGER , diretor_velho IN INTEGER)
RETURNS VOID
AS $$

DECLARE 
 
modificar CURSOR IS SELECT * FROM emp WHERE mgr = diretor_velho; 
 
BEGIN 
 
UPDATE emp 
SET mgr=diretor_novo; 
 
END; 
$$ LANGUAGE 'plpgsql';[/code]

ONde eu vou manipular o cursor dentro dessa funçao?

OBRIGADA,
veronica

olá, voce vai ter que explicar um pouco melhor,
sinceramente ficou meio dificil de entender o que voce quer.

esta pensando em uma sintaxe SQl ou em um Procedure?
voce quer alterar uma chave primaria ou estrangeira?

Ola e obrigada por responder.

Ja avancei um pouco na funçao, mas ela tem alguns erros:

[code]CREATE OR REPLACE FUNCTION modificar(diretorNovoIN INTEGER , diretorVelho IN INTEGER)
RETURNS VOID
AS $$

DECLARE
V_TOT_UPD integer:=0;
ligne emp%rowtype;

–cursor
modificar CURSOR IS SELECT * FROM EMP WHERE mgr = diretorVelho;

BEGIN
V_TOT_UPD :=0;
OPEN modificar;

LOOP
FETCH modificar INTO ligne;
EXIT WHEN NOT FOUND;

IF (diretorNovo!= emp.empno) THEN
RAISE NOTICE ‘Diretor nao existe’;
END IF;

IF (diretorVelho != emp.empno) THEN
RAISE NOTICE ‘Diretor nao existe’;
END IF;

UPDATE emp SET mgr=diretorNovo WHERE mgr=ligne.mgr;

–Contador
V_TOT_UPD := V_TOT_UPD + 1;
IF V_TOT_UPD > 0 THEN
RAISE NOTICE ‘Registros Atualizados.: %’, V_TOT_UPD;
END IF;

END LOOP;
CLOSE modificar;
END;
$$ LANGUAGE ‘plpgsql’;[/code]

Gostaria de atualizar os valores da coluna de diretor (mgr).
Se eu tenho mgr = 7900, gostaria de mudar para 7782 usando a funçao.
select modificar(7782,7900);

Fiz a funçao acima, mas atualiza somente 1 ocorrencia de diretor (mgr)
Quando tento atualizar diretor (mgr) com 2 ocorrencias, da erro.

Gostaria também de checar se os valores de diretor existem na tabema de empregado (emp).

OBRIGADA,
veronica