Estou precisando fazer um formulário com os campos das tabelas pessoa e pessoa _cy. A tabela pessoa _cy é um complemento da tabela pessoa que já veio criada de outro lugar.
Minha dificuldade e gravar esses dados Inserir os dados na tabela pessoa e pessoa _cy ao mesmo tempo , O código (NRSEQPESSOA ) assim que gerado tem que ser armazenado no id_pessoa ,da tabela pessoa_cy.
[/b]
Inserindo dados de um unico formulario em duas tabelas
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
faz uma trigger em pessoa insderindo em pessoa _cy
o problema e que tenho que pegar o Codigo (NRSEQPESSOA )criado na tabela pessoa e passar para id_pessoa da tabela pessoa_cy porque a tabela pessoa_cy e um complemento da tabela pessoa por isso o codigo não pode ser diferente.
tentei usar SELECT MAX mais não funciona e da erro como tempo.
tentei usar SELECT MAX mais não funciona e da erro como tempo.
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
posta suas tabelas (estrutura) ai..
ao boa prática diz que devemos usar sequence para controlar o id de uma tabela..
esse problema q você ta levantando e facil de recolver basta usar a variavel :NEW dentro da trigger e você tera o id que devera ser inserido na tabela pessoa_cy
ao boa prática diz que devemos usar sequence para controlar o id de uma tabela..
esse problema q você ta levantando e facil de recolver basta usar a variavel :NEW dentro da trigger e você tera o id que devera ser inserido na tabela pessoa_cy
Fiz esse codigo aqui mais já mudei tanto que to ate confuso estou iniciando e sei muito pouco ainda criei essa PROCEDURE
CREATE OR REPLACE PROCEDURE pessoa_upsert(
p_NRSEQPESSOA IN NUMBER(12,0)
p_NRSEQEMPRESA IN NUMBER(12,0)
p_CDSITUACAO IN VARCHAR2(8)
p_TPPESSOA IN VARCHAR2(8)
p_TXNOME IN VARCHAR2(60)
p_AORECEBER IN VARCHAR2(3)
p_AOPAGAR IN VARCHAR2(3)
p_TXLOGRADOURO IN VARCHAR2(60)
p_TXNUMERO IN VARCHAR2(10)
p_TXCIDADE IN VARCHAR2(30)
p_TXESTADO IN VARCHAR2(20)
p_TXCOMPLEMENTOENDERECO IN VARCHAR2(30)
p_NRCEP IN VARCHAR2(20)
p_TXTELEFONE IN VARCHAR2(15)
p_TXEMAIL IN VARCHAR2(50)
p_DTCLIENTEDESDE IN DATE
p_TXPAIS IN VARCHAR2(30)
p_NRDOCUMENTO IN VARCHAR2(30)
)
IS
BEGIN
UPDATE pessoa
SET NRSEQPESSOA = p_NRSEQPESSOA,
NRSEQEMPRESA = p_NRSEQEMPRESA,
CDSITUACAO = p_CDSITUACAO,
TPPESSOA = p_TPPESSOA,
TXNOME = p_TXNOME,
AORECEBER = p_AORECEBER,
AOPAGAR = p_AOPAGAR,
TXLOGRADOURO = p_TXLOGRADOURO,
TXNUMERO = p_TXNUMERO,
TXCIDADE = p_TXCIDADE,
TXESTADO = p_TXESTADO,
TXCOMPLEMENTOENDERECO = p_TXCOMPLEMENTOENDERECO,
NRCEP = p_NRCEP,
TXTELEFONE = p_TXTELEFONE,
TXEMAIL = p_TXEMAIL,
DTCLIENTEDESDE = p_DTCLIENTEDESDE,
TXPAIS = p_TXPAIS,
NRDOCUMENTO = p_NRDOCUMENTO
WHERE nrseqpessoa = p_nrseqpessoa;
UPDATE pessoa_cyber
SET ID_PESSOA = p_ID_PESSOA
ID_UNIDADE_CADASTRO = p_ID_UNIDADE_CADASTRO
ID_CARGO = p_ID_CARGO
DT_CADASTRO = p_DT_CADASTRO
DT_NASCIMENTO = p_DT_NASCIMENTO
TXSEXO = p_TXSEXO
NRCELULAR = p_NRCELULAR
NRNIVEL_ESCOLARIDADE = p_NRNIVEL_ESCOLARIDADE
TXESCOLA = p_TXESCOLA
TXOBS = p_TXOBS
WHERE ID_PESSOA = p_ID_PESSOA;
IF SQL%NOTFOUND THEN
INSERT INTO pessoa( NRSEQPESSOA,
NRSEQEMPRESA,
CDSITUACAO,
TPPESSOA,
TXNOME,
AORECEBER,
AOPAGAR,
TXLOGRADOURO,
TXNUMERO,
TXCIDADE,
TXESTADO,
TXCOMPLEMENTOENDERECO,
NRCEP,
TXTELEFONE,
TXEMAIL,
DTCLIENTEDESDE,
TXPAIS,
NRDOCUMENTO
)
VALUES(p_nrseqpessoa,
p_cdsituacao,
p_tppessoa,
p_txnome,
p_aoreceber,
p_aopagar,
p_txlogradouro,
p_txnumero,
p_txcomplementoendereco,
p_nrcep,
p_txcidade,
p_txestado,
p_txtelefone,
p_txemail,
p_dtclientedesde,
p_txpais,
p_nrdocumento);
IF ID_PESSOA IS NULL THEN
INSERT INTO pessoa_cyber (id_pessoa)
values (p_nrseqpessoa);
END IF;
IF P_NM_FANTASIA IS NULL THEN
RAISE_APPLICATION_ERROR(-20001,'VALOR INVÁLIDO ');
END IF;
INSERT INTO pessoa_cyber(ID_PESSOA,
ID_UNIDADE_CADASTRO,
ID_CARGO,
DT_CADASTRO,
DT_NASCIMENTO,
TXSEXO,
NRCELULAR,
NRNIVEL_ESCOLARIDADE,
TXESCOLA,
TXOBS)
VALUES (ID_PESSOA,
ID_UNIDADE_CADASTRO,
ID_CARGO,
DT_CADASTRO,
DT_NASCIMENTO,
TXSEXO,
NRCELULAR,
NRNIVEL_ESCOLARIDADE,
TXESCOLA,
TXOBS);
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001,' ACONTECU UM PROBLEMA AO INSERIR CLIENTE NA TABELA LOC_CLIENTE');
END;
-
- Rank: Programador Sênior
- Mensagens: 52
- Registrado em: Qua, 15 Out 2008 4:05 pm
- Localização: taquara-RS
maicon,
esse tipo de controle tu pode fazer via a interface que você irá usar para a entrada dos dados, não precisa reinventar a roda, se for via form da Oracle, ele já faz isso para você, não precisa fazer esse controle na mão, basta criar um bloco master-detalhe, mas claro um trigger tambem resolveria teu caso, só que fica meio ingessado também por causa dos demais campos da pessoa_cyber, masssss é só uma dica, segue um exemplo de trigger,
vlw,
qualquer coisa posta ai,
esse tipo de controle tu pode fazer via a interface que você irá usar para a entrada dos dados, não precisa reinventar a roda, se for via form da Oracle, ele já faz isso para você, não precisa fazer esse controle na mão, basta criar um bloco master-detalhe, mas claro um trigger tambem resolveria teu caso, só que fica meio ingessado também por causa dos demais campos da pessoa_cyber, masssss é só uma dica, segue um exemplo de trigger,
CREATE OR REPLACE TRIGGER nome_da_trigger
AFTER INSERT OR UPDATE OR DELETE ON pessoa
FOR EACH ROW
--
DECLARE
--
id_unidade_cadastro pessoa_cyber%id_unidade_cadastro ;
id_cargo pessoa_cyber%id_cargo ;
dt_cadastro pessoa_cyber%dt_cadastro ;
dt_nascimento pessoa_cyber%dt_nascimento ;
txsexo pessoa_cyber%txsexo ;
nrcelular pessoa_cyber%nrcelular ;
nrnivel_escolaridade pessoa_cyber%nrnivel_escolaridade ;
txescola pessoa_cyber%txescola ;
txobs pessoa_cyber%txobs ;
BEGIN
--
IF INSERTING THEN
--Código do Insert
INSERT INTO pessoa_cyber( id_pessoa
, id_unidade_cadastro
, id_cargo
, dt_cadastro
, dt_nascimento
, txsexo
, nrcelular
, nrnivel_escolaridade
, txescola
, txobs)
VALUES( :NEW.id_pessoa
, id_unidade_cadastro
, id_cargo
, dt_cadastro
, dt_nascimento
, txsexo
, nrcelular
, nrnivel_escolaridade
, txescola
, txobs);
--
ELSIF UPDATING THEN
--Codigo do Update
NULL;
--
ELSIF DELETING THEN
--Codigo do Delete
--Considerando que não foi feito ON DELETE CASCADE na criação da tabela pessoa_cyber e não tenha chave com pessoa.
NULL;
--
END IF;
--
END;
/
vlw,
qualquer coisa posta ai,
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
É cara se um registro da tabela pessoa tiver varios da pessoa_cy é melhor usar um bloco mestre detalhe, que ele vai fazer todos controles que tu precisar.
Podes fazer isto via trigger do forms também, pois ao criar um trigger no banco tu tem que ter muito cuidado para não inserir registros em situações indesejadas, se for algo mais específico te sugiro que faça no forms mesmo.
Qualquer duvida de qual trigger utilizar, especifíca melhor a tua situação.
Podes fazer isto via trigger do forms também, pois ao criar um trigger no banco tu tem que ter muito cuidado para não inserir registros em situações indesejadas, se for algo mais específico te sugiro que faça no forms mesmo.
Qualquer duvida de qual trigger utilizar, especifíca melhor a tua situação.
Estude o comando INSERT ALL que resolve teu problema... e na consulta doINSERT ALL você seleciona a sequence mais os valores a serem inseridos...
Tentei de outra forma e deu certo muito obrigado pela dica...
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes