PMorgado
11-06-2007, 17:22
Boas,
Tenho um script que insere um novo registo numa tabela.
O campo do row_id é calculado com uma subquery.
Não posso automatizar este processo pois não me é possivel alterar o tipo de campo row_id que é varchar.
O problema é que muitas vezes este script é despoletado exactamente ao mesmo tempo mais do que uma vez.
O que provoca que o resultado da subquery para saber o row_id devolva o mesmo valor para dois ou mais inserts, o que viola a chave e um ou mais registos não são inseridos.
A query é esta:
BEGIN
INSERT INTO CX_EIM_LOG
(ROW_ID, CREATED_BY, LAST_UPD_BY, EIM_TABLE, H_INICIO,CONCEITO, N_CADEIA)
VALUES ((SELECT MAX(TO_NUMBER(ROW_ID)) FROM CX_EIM_LOG) + 1, (SELECT ROW_ID FROM S_USER WHERE LOGIN ='&3'), (SELECT ROW_ID FROM S_USER WHERE LOGIN ='&3'), '&1',SYSDATE,'&2',(SELECT MAX(N_CADEIA) FROM CX_EIM_LOG WHERE CONCEITO ='&2')+1);
END;
/
COMMIT;
QUIT
alguma sugestão de forma a que esta query não seja executada mais do que uma vez ao mesmo tempo?
tks
cpts
PM
Tenho um script que insere um novo registo numa tabela.
O campo do row_id é calculado com uma subquery.
Não posso automatizar este processo pois não me é possivel alterar o tipo de campo row_id que é varchar.
O problema é que muitas vezes este script é despoletado exactamente ao mesmo tempo mais do que uma vez.
O que provoca que o resultado da subquery para saber o row_id devolva o mesmo valor para dois ou mais inserts, o que viola a chave e um ou mais registos não são inseridos.
A query é esta:
BEGIN
INSERT INTO CX_EIM_LOG
(ROW_ID, CREATED_BY, LAST_UPD_BY, EIM_TABLE, H_INICIO,CONCEITO, N_CADEIA)
VALUES ((SELECT MAX(TO_NUMBER(ROW_ID)) FROM CX_EIM_LOG) + 1, (SELECT ROW_ID FROM S_USER WHERE LOGIN ='&3'), (SELECT ROW_ID FROM S_USER WHERE LOGIN ='&3'), '&1',SYSDATE,'&2',(SELECT MAX(N_CADEIA) FROM CX_EIM_LOG WHERE CONCEITO ='&2')+1);
END;
/
COMMIT;
QUIT
alguma sugestão de forma a que esta query não seja executada mais do que uma vez ao mesmo tempo?
tks
cpts
PM