Oi pessoal,
estou precisando de mais um help...
Isso eu nunca fiz, então quem puder me explicar detalhadamente eu agradeço.
Eu criei uma tela com dados não basetable e dados basetable e preciso gravá-los em uma tabela temporária, alguém pode me ajudar, como fazer...
Obrigada,
Gravar dados em tabela temporária
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
Olá Luana, tdo beleza??
segue abaixo um exemplo de como fazer isso.
[]'s
segue abaixo um exemplo de como fazer isso.
GO_BLOCK('PARAMETROS');
FIRST_RECORD;
LOOP
INSERT INTO PARAMETRO (CODIGO,
DESCRICAO,
VALOR)
VALUES (:PARAMETROS.CODIGO,
:PARAMETROS.DESCRICAO,
:PARAMETROS.VALOR);
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
EXIT;
ELSE
NEXT_RECORD;
END IF;
END LOOP;
-
- Rank: Programador Sênior
- Mensagens: 68
- Registrado em: Qua, 24 Out 2007 3:06 pm
- Localização: Nilópolis - Rio de Janeiro
Tineks tdo bleza,
Eu coloquei seu exemplo na trigger do WHEN-BUTTON-PRESSED de acordo com o nome dos campos e bloco da minha tela, pois assim que eu clico no botão que eu criei, o botão muda de label e faz o insert na minha tabela temporária, mas ao clicar no botão aparece a mensagem de erro abaixo:
FRM-40735: WHEN-BUTTON-PRESSED trigger raised unhandled exception ORA-04098.
O que pode ser?
Obrigada,
Luana
Eu coloquei seu exemplo na trigger do WHEN-BUTTON-PRESSED de acordo com o nome dos campos e bloco da minha tela, pois assim que eu clico no botão que eu criei, o botão muda de label e faz o insert na minha tabela temporária, mas ao clicar no botão aparece a mensagem de erro abaixo:
FRM-40735: WHEN-BUTTON-PRESSED trigger raised unhandled exception ORA-04098.
O que pode ser?
Obrigada,
Luana
-
- 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
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Luana,
Pra melhorar o codigo, coloque uma EXCEPTION no teu WHEN-BUTTON-PRESSED e manda pra gente.
Pra melhorar o codigo, coloque uma EXCEPTION no teu WHEN-BUTTON-PRESSED e manda pra gente.
-
- Rank: Programador Sênior
- Mensagens: 68
- Registrado em: Qua, 24 Out 2007 3:06 pm
- Localização: Nilópolis - Rio de Janeiro
Oi Trevisolli,
Olha como está a lógica abaixo:
Eu não sei se está legal, pois eu nunca fiz isso...
Na verdade eu inclui os campos de Primary Key recebendo zero(0), pois acredito que mesmo eu não precise deles é necessário inclui-los ou estou enganada?
Valeu,
Um abraço,
Luana
Olha como está a lógica abaixo:
BEGIN
IF (:BLK_SELETOR.DT_FROM IS NOT NULL AND :BLK_SELETOR.DT_TO IS NOT NULL)OR
(:BLK_SELETOR.CATEGORY IS NOT NULL)OR
(:BLK_SELETOR.ID_UNID_EMP IS NOT NULL)THEN
SET_ITEM_PROPERTY('FFOR_FAT_FORNEC.BTN_UNCONFIRMED',LABEL,'CONFIRMED');
GO_BLOCK('FFOR_FAT_FORNEC');
FIRST_RECORD;
LOOP
BEGIN
INSERT INTO INTQ_LOG_TRIGGER_FFOR (TIPO_TRANSACAO,
ID_INSTALACAO_EMPRESA_PEDIDO,
ID_UNID_EMP,
NUM_FAT_FORNEC,
COD_INTERNO_FAT_FORNEC,
DATA_GERACAO_INTQ)
VALUES (0,
0,
:FFOR_FAT_FORNEC.ID_UNID_FORNEC,
:FFOR_FAT_FORNEC.DT_EMISSAO_FAT_FORNEC,
0,
:FFOR_FAT_FORNEC.NUM_FAT_FORNEC);
EXCEPTION
WHEN NO_DATA_FOUND THEN
MESSAGE('TESTE');
END;
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
EXIT;
ELSE
NEXT_RECORD;
END IF;
END LOOP;
END IF;
END;
Eu não sei se está legal, pois eu nunca fiz isso...
Na verdade eu inclui os campos de Primary Key recebendo zero(0), pois acredito que mesmo eu não precise deles é necessário inclui-los ou estou enganada?
Valeu,
Um abraço,
Luana
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
Oi Luana,
o erro na inclusao pode acontecer caso já exista algum registro na tabela com a PK 0, mas pra facilitar você pode fazer o seguinte, você já criou uma exception abaixo do insert só q nela você colocou um no_data_found, como você está incluindo nunca vai dar um no_data_found, substitua ela pelo others, por exemplo,
depois você pode colocar mais um exception, só q um exception geral, q fica no final da sua trigger, por exemplo..
depois disso você roda sua aplicação, e o erro será exibido na tela, ai você posta aqui pra gente o erro q deu..
[]'s
o erro na inclusao pode acontecer caso já exista algum registro na tabela com a PK 0, mas pra facilitar você pode fazer o seguinte, você já criou uma exception abaixo do insert só q nela você colocou um no_data_found, como você está incluindo nunca vai dar um no_data_found, substitua ela pelo others, por exemplo,
BEGIN
INSERT ...
EXCEPTION
WHEN OTHERS THEN
MESSAGE ('ERRO NO INSERT : '||SQLERRM);
MESSAGE ('ERRO NO INSERT : '||SQLERRM);
END;
BEGIN
IF (:blk_seletor.dt_from IS NOT NULL AND :blk_seletor.dt_to IS NOT NULL
)
OR (:blk_seletor.CATEGORY IS NOT NULL)
OR (:blk_seletor.id_unid_emp IS NOT NULL) THEN
.
.
.
.
END IF;
EXCEPTION
WHEN OTHERS THEN
MESSAGE ('ERRO NO GERAL : '||SQLERRM);
MESSAGE ('ERRO NO GERAL : '||SQLERRM);
END;
[]'s
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
Olá Luana,
provavelmente o erro esteja ocorrendo no campo "dt_emissao_fat_fornec"
faça um teste, substitua no insert o campo
por
tenta ai e depois da um retorno..
[]'s[/b]
provavelmente o erro esteja ocorrendo no campo "dt_emissao_fat_fornec"
faça um teste, substitua no insert o campo
:ffor_fat_fornec.dt_emissao_fat_fornec
TO_DATE(:ffor_fat_fornec.dt_emissao_fat_fornec,'DD/MM/YYYY')
[]'s[/b]
-
- Rank: Programador Sênior
- Mensagens: 68
- Registrado em: Qua, 24 Out 2007 3:06 pm
- Localização: Nilópolis - Rio de Janeiro
Oi sou eu de novo... Rsrsrs...
Agora aparece a seguinte msg:
ERRO NO INSERT: ORA-01858: a non-numeric character was found where a numeric was expected.
Eu não sei o que pode estar acontecendo, mas acho que tem a ver com os valores que estou incluindo, veja abaixo:
Luana
Agora aparece a seguinte msg:
ERRO NO INSERT: ORA-01858: a non-numeric character was found where a numeric was expected.
Eu não sei o que pode estar acontecendo, mas acho que tem a ver com os valores que estou incluindo, veja abaixo:
BEGIN
IF (:BLK_SELETOR.DT_FROM IS NOT NULL AND :BLK_SELETOR.DT_TO IS NOT NULL)OR
(:BLK_SELETOR.CATEGORY IS NOT NULL)OR
(:BLK_SELETOR.ID_UNID_EMP IS NOT NULL)THEN
SET_ITEM_PROPERTY('FFOR_FAT_FORNEC.BTN_UNCONFIRMED',LABEL,'CONFIRMED');
GO_BLOCK('FFOR_FAT_FORNEC');
FIRST_RECORD;
LOOP
BEGIN
INSERT INTO INTQ_LOG_TRIGGER_FFOR (TIPO_TRANSACAO,
ID_INSTALACAO_EMPRESA_PEDIDO,
ID_UNID_EMP,
NUM_FAT_FORNEC,
COD_INTERNO_FAT_FORNEC,
DATA_GERACAO_INTQ)
VALUES ( 0,
0,
:FFOR_FAT_FORNEC.ID_UNID_FORNEC,
to_date(:FFOR_FAT_FORNEC.DT_EMISSAO_FAT_FORNEC,'mm/dd/yyyy'),
'0',
:FFOR_FAT_FORNEC.NUM_FAT_FORNEC);
EXCEPTION
WHEN OTHERS THEN
MESSAGE ('ERRO NO INSERT : '||SQLERRM);
MESSAGE ('ERRO NO INSERT : '||SQLERRM);
END;
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
EXIT;
ELSE
NEXT_RECORD;
END IF;
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS THEN
MESSAGE ('ERRO NO GERAL : '||SQLERRM);
MESSAGE ('ERRO NO GERAL : '||SQLERRM);
END;
-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
olha a formatacao do to_date invertido verifica se não é isto
troca por
dd - significa dois digitos para dia
mm - significa dois digitos para mês
yyyy - significa quatro digitos para ano
to_date(:FFOR_FAT_FORNEC.DT_EMISSAO_FAT_FORNEC,'mm/dd/yyyy')
to_date(:FFOR_FAT_FORNEC.DT_EMISSAO_FAT_FORNEC,'dd/mm/yyyy')
mm - significa dois digitos para mês
yyyy - significa quatro digitos para ano
-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
bom pelo q eu saiba Luana o banco não consegue salvar neste formato... pelo menos nunca trabalhei desta forma...
tipo ter q tratar essa formatação americana que você quer na mascara do seu campo e não no banco de dados...
mas, caso esteja enganado pelo nome de suas colunas eu acho q tambem podem ser:
DATA_GERACAO_INTQ você insere :FFOR_FAT_FORNEC.NUM_FAT_FORNEC pelo nome da sua coluna parece um campo data
ou
COD_INTERNO_FAT_FORNEC você insere '0' não é um campo numérico??
abrs
tipo ter q tratar essa formatação americana que você quer na mascara do seu campo e não no banco de dados...
mas, caso esteja enganado pelo nome de suas colunas eu acho q tambem podem ser:
DATA_GERACAO_INTQ você insere :FFOR_FAT_FORNEC.NUM_FAT_FORNEC pelo nome da sua coluna parece um campo data
ou
COD_INTERNO_FAT_FORNEC você insere '0' não é um campo numérico??
abrs
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
Luana,
se o campo DATA_GERACAO_INTQ for do tipo VARCHAR você pode gravar nesse formato (DD/MM/YYYY), mas se o campo for date você vai ter q passar um campo no formato Date..
[]s
se o campo DATA_GERACAO_INTQ for do tipo VARCHAR você pode gravar nesse formato (DD/MM/YYYY), mas se o campo for date você vai ter q passar um campo no formato Date..
[]s
-
- 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
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Luana, boa tarde.
Analisei o código e, será que você não inverteu os valores no finalzinho do teu insert?
Faça essa inversão, nas 3 últimas colunas do teu insert e faça um teste:
insert into ....
values
Analisei o código e, será que você não inverteu os valores no finalzinho do teu insert?
BEGIN
INSERT INTO INTQ_LOG_TRIGGER_FFOR (TIPO_TRANSACAO,
ID_INSTALACAO_EMPRESA_PEDIDO,
ID_UNID_EMP,
NUM_FAT_FORNEC,
COD_INTERNO_FAT_FORNEC,
DATA_GERACAO_INTQ)
VALUES ( 0,
0,
:FFOR_FAT_FORNEC.ID_UNID_FORNEC,
to_date(:FFOR_FAT_FORNEC.DT_EMISSAO_FAT_FORNEC,'mm/dd/yyyy'),
'0',
:FFOR_FAT_FORNEC.NUM_FAT_FORNEC);
Faça essa inversão, nas 3 últimas colunas do teu insert e faça um teste:
insert into ....
NUM_FAT_FORNEC,
COD_INTERNO_FAT_FORNEC,
DATA_GERACAO_INTQ)
:FFOR_FAT_FORNEC.NUM_FAT_FORNEC,
'0',
to_date(:FFOR_FAT_FORNEC.DT_EMISSAO_FAT_FORNEC,'mm/dd/yyyy');
-
- Rank: Programador Sênior
- Mensagens: 68
- Registrado em: Qua, 24 Out 2007 3:06 pm
- Localização: Nilópolis - Rio de Janeiro
Oi pessoal,
me desculpem a trabalheira, afinal de contas o erro era a minha falta de atenção, pois realmente eu estava incluindo um campo de data em um campo errado... Acho que a gente vai ficando desesperada e acaba perdendo a atenção, isso foi bom que aprendi de verdade...
Só que tem uma dúvida: Eu tenho que incluir o commit logo depois da lógica do insert, correto?
Obrigada pela ajuda de todos!!!
Um abraço,
Luana
me desculpem a trabalheira, afinal de contas o erro era a minha falta de atenção, pois realmente eu estava incluindo um campo de data em um campo errado... Acho que a gente vai ficando desesperada e acaba perdendo a atenção, isso foi bom que aprendi de verdade...
Só que tem uma dúvida: Eu tenho que incluir o commit logo depois da lógica do insert, correto?
Obrigada pela ajuda de todos!!!
Um abraço,
Luana
-
- 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
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Então Luana....
Sobre o commit, não sei se seria viável, por se tratar de uma tabela temporária, quer dizer, ficaria uma temporária definitiva, correto?
Verifique e, caso necessário mesmo, coloque depois do teu END LOOP.
Dica importante:
Em alguns casos, TEMP TABLES são criadas com ON COMMIT DELETE ROWS.
Verifique também a criação da tua tabela, pois os dados podem ser "eliminados" quando "Commitados".
Se não tiver parâmetro nenhum na criação da tua tabela (ou tiver um ON COMMIT PRESERVE ROWS), tudo bem, pode colocar o commit.
qualquer coisa, conta com a gente.
Sobre o commit, não sei se seria viável, por se tratar de uma tabela temporária, quer dizer, ficaria uma temporária definitiva, correto?
Verifique e, caso necessário mesmo, coloque depois do teu END LOOP.
Dica importante:
Em alguns casos, TEMP TABLES são criadas com ON COMMIT DELETE ROWS.
Verifique também a criação da tua tabela, pois os dados podem ser "eliminados" quando "Commitados".
Se não tiver parâmetro nenhum na criação da tua tabela (ou tiver um ON COMMIT PRESERVE ROWS), tudo bem, pode colocar o commit.
qualquer coisa, conta com a gente.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 18 visitantes