Desktop
Website
Multimedia
Database
Security
Enterprise
Pergunta : Segurando exceções e agarrando mensagens de erro de Oracle
Olá! indivíduos,
Given um certificado abaixo:
ScriptName: InsRecOnMytable.sql
--------------------------
------
ERR_MSG VARCHAR2 do
DECLARE (4000);
SCRT_NAME VARCHAR2 (400): = “InsRecOnMytable.sql”; inserção do
BEGIN
em valores do
de myschema.mytable (ESQUEMA, NOME, OBSERVAÇÃO, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, PROPRIETÁRIO, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (tabela 1 do “myschema”, a “mytable”, da “amostra”, “TABELA”, “BASIC”, “PRODUC
T”, “PRODUC
T”, 0, “Samp
le 1”, zero); inserção do
em valores do
de myschema.mytable (ESQUEMA, NOME, OBSERVAÇÃO, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, PROPRIETÁRIO, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (tabela 2 do “myschema”, a “mytable”, da “amostra”, “TABELA”, “BASIC1”, “PRODU
CT1”, “PROD
UCT1”, 1, “S
ample 2”, zero); o
comete;
GrabErr do
(SCRT_NAME, “sucesso ");
END SE;
EXCEPTION
QUANDO DUP_VAL_ON_INDEX ENTÃO -- os registros da duplicata dos punhos o
do error
que seleciona os msg
duplicado da inserção em ERR_MSG de duplo;
GrabErr (SCRT_NAME, ERR_MSG); -- um procedimento que tomar o ERR_MSG como o
do parameter
QUANDO OUTRO ENTÃO -- segura todos msg
do errors
resultou do above> duplicado da inserção em ERR_MSG de duplo;
GrabErr (SCRT_NAME, ERR_MSG); -- um procedimento que tome o ERR_MSG como o ROLLBACK do
do parameter
;
END; a necessidade do
/
I apenas uma maneira de poder passar ou armazenar using uma variável a mensagem de erro real de ORACLE resultou do registro da duplicata acima e mais importante, a linha número onde o erro ocorreu para o certificado da eliminação de erros purposes.
the acima é uma idéia somente. Sentir que livre sugerir o que quer que é a melhor solução através da lima de REGISTRO de PL/SQL.
Using trabalhará mas a idéia aqui é que o procedimento de GrabErr atualizará algumas colunas em uma tabela diz SCRIPTINFO que contem os detalhes para cada certificado que está sendo executado. Se há uma maneira de criar a lima de REGISTRO e ao mesmo tempo de estar destilador capaz para atualizar a tabela de SCRIPTINFO, então tanto better.
qualquer outra coisa semelhante:
--------------------
SCRIPTINFO TABLE
----------------o oracle
ID EXEC_STATUS REMARKS
==========================
==========
==========
==========
==========
=========
1 erra msg.>
2 MyScriptInsert.sql Success
==========================
==========
==========
==========
==========
=========
Can que qualquer outra coisa semelhante seja feito?
Thanks adiantado,
jrmn
class= do
Resposta : Segurando exceções e agarrando mensagens de erro de Oracle
Seu código é APROVADO, mas eu recomendaria algumas mudanças:
Não há nenhuma necessidade de fazer isto:
selecionar
em ERR_MSG de duplo;
O erro está nestas variáveis: SQLCODE e SQLERRM, assim
EXCEÇÃO
QUANDO DUP_VAL_ON_INDEX ENTÃO -- a duplicata dos punhos grava o erro
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM);
ROLLBACK; -- Eu adicionei este porque em um procedimento GrabErr deve haver uma TRANSAÇÃO AUTÔNOMA
QUANDO OUTRO ENTÃO -- segura todos erros restantes
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM);
ROLLBACK;
EXTREMIDADE;
Na TRANSAÇÃO AUTÔNOMA do uso de GrabErr do procedimento.
Você pode igualmente definir seus próprios erros da aplicação.
Está aqui mais sobre a manipulação de exceção:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i7014
Se você quer saber a linha onde o erro ocorre então adicionar um n_debug da variável por exemplo:
DECLARAR
SCRT_NAME VARCHAR2 (400): = “InsRecOnMytable.sql”;
n_debug PLS_INTEGER: =0;
COMEÇAR
n_debug: =1;
Inserção em myschema.mytable (ESQUEMA, NOME, OBSERVAÇÃO, ORACLE_TYPE
, FUNCTIONAL_TYPE
, PROPRIETÁRIO, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
valores (o “myschema”, “mytable”, da “a tabela 1 amostra”, “TABELA”, “BASIC”, “PRODUTO
”, “PRODUTO
”, 0, “prova
1”, zero);
n_debug: =2;
Inserção em myschema.mytable (ESQUEMA, NOME, OBSERVAÇÃO, ORACLE_TYPE
, FUNCTIONAL_TYPE
, PROPRIETÁRIO, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
valores (o “myschema”, “mytable”, da “a tabela 2 amostra”, “TABELA”, “BASIC1”, “PRODUCT1
”, “PRODUCT1
”, 1, “prova
2”, zero);
n_debug: =3;
cometer;
GrabErr (n_debug, SCRT_NAME,
“sucesso ");
TERMINAR SE;
EXCEÇÃO
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM);
ROLLBACK;
QUANDO OUTRO ENTÃO -- segura todos erros restantes
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM);
ROLLBACK;
EXTREMIDADE;
Eu faço-a esta maneira. Você pode igualmente criar um procedimento com o parâmetro SCRT_NAME da entrada e em vez do certificado você pode usar o procedimento.
Eu espero que esta será pouca ajuda para você.
Outras soluções
Perguntas da entrevista do certificado de Shell da festança
lima de .vmdk
Como encontrar a contagem da fileira em Oracle DataReader em ASP.NET?
Excitador do bluetooth BCM2045 do inspiron 1720 de Dell para o profissional de Windows Xp.
Como conseguir o lightbox mostrar sobre a bandeira instantânea?
Fora do escritório o assistente que não trabalha w/Forwarding configurou
Redistribuindo o RASGO em subnets non-contiguous do OSPF.
líquidos de corpo após a sessão da natação
SQL0952N
Criando um vbscript para a chave do registro - IRPStackSize