DE-PARA

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

salve,

preciso fazer um de-para ...tipo:

tenho uma tabela com 10 colunas ...

preciso que a coluna primary key....

receba outros valores ...

assim sera atualizada...

por exemplo, tenho na coluna 1 o valor de 300 que vai passar para a coluna 2, assim a coluna 1 recebera outro valor tipo 350.
teria como alguém me explicar como funciona este tal de "DE-PARA"...
ou me dar uma ajuda se já fizeram este tipo de procedimento...

Grato
Fernando.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Qual o critério de alteração deste valor?
Você passa um valor e ele sai alterando as demais linhas?

Caso seja isso, veja este exemplo:

Selecionar tudo

CREATE TABLE teste
(id NUMBER,
 valor NUMBER(10,3));
 
 INSERT INTO teste VALUES (1, 100);
 INSERT INTO teste VALUES (2, 200);
 INSERT INTO teste VALUES (3, 300);
 INSERT INTO teste VALUES (4, 400);
 INSERT INTO teste VALUES (5, 500);
 INSERT INTO teste VALUES (6, 600);
 
 
 SELECT *
   FROM teste;
 
 /*
1        	100
2        	200
3        	300
4        	400
5        	500
6        	600
*/

-- Procedure (em bloco anônimo) que altera o valor 
-- Esta procedure pode ser de banco tb.

DECLARE 
 PROCEDURE PRC_CORRIGE_VALORES (P_VALOR_ADICIONAL IN NUMBER)
 IS 
   CURSOR CUR_TESTE
     IS 
       SELECT *
         FROM TESTE;
 BEGIN

    -- Atualiza os valores, adicionando o valor passado por parâmetro
    UPDATE TESTE
       SET VALOR = VALOR + NVL(P_VALOR_ADICIONAL,0); 
       
    COMMIT;
				   
 EXCEPTION 
   WHEN OTHERS THEN 
     raise_application_error(-20001, 'Erro atualizando valroes: ' || SQLERRM);
 END PRC_CORRIGE_VALORES;
 
BEGIN
  PRC_CORRIGE_VALORES(10);
END; 


SELECT *
   FROM TESTE;
  
/*
1     	110
2     	210
3     	310
4     	410
5     	510
6     	610
*/		

NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

então mano...

tenho sobrepor o numero 110 que é PK pelo um numero por ex: 10215

tenho um monitor que seu numero de patrimonio é 11254 ...

e este numero vai ser mudado para por ex: 24587 ...

então esse é o problema sei que terei que desabilitar uma porrada de constraint e tal ....

e o pior é que este numero manda no sistema ....

vou tipo modelar o sistema quase inteiro para modificar todos os numeros de patrinonios que serao sobrepostos.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Bom companheiro,

Aí já é mais complicado....
Vai ter q percorrer onde esta tua tabela manda FK's e alterar tudo mesmo.

Questão: É necessário mesmo alterar este nro. de PK ?
NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

então meu velho ....para mim é uma besteira ...eles estam querendo...quase modelar o sistema novamente por causa de uma pkzinha de nada ....mas por causa dela terei que mudar tudo.

É que eles estam atualizando os patrimonios da empresa ...então a etiqueta antiga já era, e sera substituida,antes alterar so esta pk que o sistema inteiro.

[]'s
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

você não poderia excluir o registro que está alterando e incluir um novo com os mesmos dados porem com a Pk correta???
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Boa sorte ai, abaixo segue uma dica de como localizar os filhos da tua tabela:

Selecionar tudo


SELECT TPAI.TABLE_NAME TABELA_PAI
       , TFILHA.TABLE_NAME TABELA_FILHA
       , CFILHA.COLUMN_NAME COLUNA_TABELA_FILHA
FROM   SYS.ALL_CONSTRAINTS TPAI
       INNER JOIN SYS.ALL_CONSTRAINTS TFILHA ON TPAI.CONSTRAINT_NAME = TFILHA.R_CONSTRAINT_NAME
       INNER JOIN SYS.ALL_CONS_COLUMNS CFILHA ON TFILHA.CONSTRAINT_NAME = CFILHA.CONSTRAINT_NAME
WHERE  TPAI.CONSTRAINT_TYPE = 'P' --  ( PRIMARY )
       AND TPAI.TABLE_NAME = 'T_PAI'  -- INFORMAR NOME DA TABELA PAI
ORDER BY TABELA_FILHA, COLUNA_TABELA_FILHA

qualquer coisa, manda ai.
NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

valeu cara....

abraço.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 20 visitantes