Boa tarde Evandro.
Acredito que. se vc utilizar uma SubSelect ordernada resolverá. seu problema.
Exemplo:
UPDATE MENU
SET MENU_NIVEL1 = (aux.MENU_NIVEL1-1)
from
(select
MENU_NIVEL1,
MENU_USUARIO
from
MENU
order by MENU_NIVEL1 ) AUX
WHERE
MENU.MENU_USUARIO = AUX.MENU_USUARIO AND
MENU.MENU_USUARIO = :MENU_USUARIO AND
MENU.MENU_NIVEL1 > :MENU_NIVEL1
Espero que ajude.
Mauro Lemos Júnior
----------------------------------------------------------------------
BOM DIA PESSOAL
TENHO UMA TABELA CHAMADA MENU COM AS SEGUINTES COLUNAS:
"menu_usuario" CHAR(20) NOT NULL,
"menu_nivel1" NUMERIC(3,0) NOT NULL,
"menu_nivel2" NUMERIC(3,0) NOT NULL,
"menu_nivel3" NUMERIC(3,0) NOT NULL,
"menu_nivel4" NUMERIC(3,0) NOT NULL,
"menu_descricao" VARCHAR(80) NOT NULL,
"menu_form" VARCHAR(30),
"menu_dll" VARCHAR(100),
"menu_imagem" NUMERIC(2,0) DEFAULT 0,
"menu_finalidade" VARCHAR(500),
"menu_abertura" NUMERIC(1,0),
CONSTRAINT "menu_pkey" PRIMARY KEY("menu_usuario", "menu_nivel1",
"menu_nivel2", "menu_nivel3", "menu_nivel4"),
PRECISO FAZER UM UPDATE PARA "SUBIR" O CAMPO MENU_NIVEL1 1 NÍVEL
QUANDO USO O CÓDIGO ABAIXO, ELA DÁ ERRO DE CHAVE DUPLICADA
UPDATE MENU SET MENU_NIVEL1 = (MENU_NIVEL1 -1) WHERE MENU_USUARIO =
:MENU_USUARIO AND MENU_NIVEL1 > :MENU_NIVEL1
ACONTECE QUE O UPDATE NÃO ESTA SEGUINDO A ORDEM DA CHAVE PRIMÁRIA ENTÃO
ELE ATUALIZA POR EXEMPLO O LINHA 3 ANTES DE ATUALIZAR A LINHA 2, E COMO
A LINHA 2 JÁ EXISTE E AINDA NÃO FOI ATUALIZADA, ELA DÁ ERRO DE CHAVE
DUPLICADA
ANDEI PESQUISANDO E VI QUE NO ORACLE VC PODE USAR O ORDER BY NO UPDATE,
MAS NÃO ENCONTREI NADA PARA RESOLVER O PROBLEMA NO POSTGRESQL
ALGUÉM CONHECE ALGUMA SOLUÇÃO PARA O PROBLEMA ?
EVANDRO ANDERSEN
DESENVOL INFORMÁTICA
(43) 3323-4641
POSTGRESQL 8.2.4
WIN 2003
TENHO UMA TABELA CHAMADA MENU COM AS SEGUINTES COLUNAS:
"menu_usuario" CHAR(20) NOT NULL,
"menu_nivel1" NUMERIC(3,0) NOT NULL,
"menu_nivel2" NUMERIC(3,0) NOT NULL,
"menu_nivel3" NUMERIC(3,0) NOT NULL,
"menu_nivel4" NUMERIC(3,0) NOT NULL,
"menu_descricao" VARCHAR(80) NOT NULL,
"menu_form" VARCHAR(30),
"menu_dll" VARCHAR(100),
"menu_imagem" NUMERIC(2,0) DEFAULT 0,
"menu_finalidade" VARCHAR(500),
"menu_abertura" NUMERIC(1,0),
CONSTRAINT "menu_pkey" PRIMARY KEY("menu_usuario", "menu_nivel1",
"menu_nivel2", "menu_nivel3", "menu_nivel4"),
PRECISO FAZER UM UPDATE PARA "SUBIR" O CAMPO MENU_NIVEL1 1 NÍVEL
QUANDO USO O CÓDIGO ABAIXO, ELA DÁ ERRO DE CHAVE DUPLICADA
UPDATE MENU SET MENU_NIVEL1 = (MENU_NIVEL1 -1) WHERE MENU_USUARIO =
:MENU_USUARIO AND MENU_NIVEL1 > :MENU_NIVEL1
ACONTECE QUE O UPDATE NÃO ESTA SEGUINDO A ORDEM DA CHAVE PRIMÁRIA ENTÃO
ELE ATUALIZA POR EXEMPLO O LINHA 3 ANTES DE ATUALIZAR A LINHA 2, E COMO
A LINHA 2 JÁ EXISTE E AINDA NÃO FOI ATUALIZADA, ELA DÁ ERRO DE CHAVE
DUPLICADA
ANDEI PESQUISANDO E VI QUE NO ORACLE VC PODE USAR O ORDER BY NO UPDATE,
MAS NÃO ENCONTREI NADA PARA RESOLVER O PROBLEMA NO POSTGRESQL
ALGUÉM CONHECE ALGUMA SOLUÇÃO PARA O PROBLEMA ?
EVANDRO ANDERSEN
DESENVOL INFORMÁTICA
(43) 3323-4641
POSTGRESQL 8.2.4
WIN 2003
Torpedo Messenger- Envie torpedos do messenger para o celular da galera. Descubra como aqui!
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
