Como resolver o erro ORA-06508: PL/SQL: could not find program unit being called

CAUSA

O erro ORA-06508: PL/SQL: could not find program unit being called é causado quando o Oracle não consegue executar o método chamado, por ele não existir, por estar com erro, ou por não haver grant ou sinonimos.

CORREÇÃO

Para corrigir esse erro, é só proceder com a inversão das causas, ou seja:

  1. Se for inexistencia do método:
    1. Verificar se o nome está escrito correto na chamada;
    2. Criar o método, caso não exista;
  2. Se o método estiver com erro:
    1. Recompile, se for erro de compilação irá resolver;
    2. Resolva o outro problema para o método funcionar;
  3. Se for um método de outro usuário:
    1. Verificar se está criado um sinonimo;
    2. Verificar se foi dados um grant;

 

Caso precise de mais alguma ajuda, comente com a dúvida que tentarei ajudar.

Popularity: 3% [?]

Resolvendo o erro ORA-06502: PL/SQL: numeric or value error

O erro ORA-06502: PL/SQL: numeric or value error, por mais que a mensagem seja bem direta para algumas operações para outras ela encobre bem, ficando muito dificil de encontrar, mesmo sendo simples.

CAUSA

Este erro é causado por valores incorretos colocados em variáveis ou objetos de uma forma inválida, inclusive em transformações implicitas (para quem não sabe, por padrão o Oracle transforma um valor diferente para o valor necessário, por exemplo número para string).  Ou seja, quando tenta colocar um número de 3 digitos em uma variável de número para 2 digitos, ou quando tenta colocar uma string que contenha letras para uma variável numérica.

CORREÇÃO

Para corrigir esse erro, você deve validar a operação em si para saber o que é necessário fazer, como por exemplo aumentar o número de digitos de uma variável, como segue o exemplo:

Com erro:

<code language=’SQL’>

declare

   v number(2);

begin

   v := 100;

end;

</code>

Versão corrigida:

<code language=’SQL’>

declare

   v number(3);

begin

   v := 100;

end;

</code>

Outro erro clássico e as vezes não percebido é quando se repassa para uma variável ou campo de tabela um valor que tem que ser transformado implicitamente, então quando receber esse número, procure verificar se alguma valor está sendo passado em um formato diferente ou que ultrapasse o tamanho máximo que ele comporte.

Popularity: 8% [?]

Como fazer condições (IF) no PL-SQL (Oracle) com Decode

A partir da versão 9i do Oracle, foi disponibilizado o método Decode, que é uma ferramenta poderosa nas queries, é claro deve ser utilizada com cautela para não sobrecarregar o desempenho, mas muitas vezes é mais rápido usar por ela do que condições entre tabelas.

O decode funciona como um if, else e case. Sua sintaxe é essa:

decode( expression , search , result [, search , result]… [, default] )

Expression: é a expressão a ser comparada (desde uma variável até um select desde que os mesmos retornem apenas UM valor);

Search: é o valor a ser comparado;

Result: em caso afirmativo, é o valor que será retornado pela função;

Default: funcionaria como o else, caso nenhuma das condições fosse atendida o valor colocado nele seria assumido como retorno da função;

Para mim o entendimento mais fácil de se fazer é através de exemplos então vou tentar abordar alguns casos nesses exemplos, se você ainda estiver com dúvida, escreva um comentário com sua dúvida que eu respondo.

select nome_cliente,
       decode(tipo_cliente, 1, 'Pessoa Juridica',
			       'Pessoa Fisica')
from clientes;
select nome_cliente,
       decode((select count(1) from notas where id_cliente = t.id_cliente),
		 0, 'Nenhum pedido',
		 1, 'Um pedido',
		    'Varios pedidos')
from clientes;
select nome_cliente,
       decode(status,1,'Em aprovacao',
   		     2,'Aprovado',
		     3,'Suspenso',
		       'Cadastrado')
from clientes;

Popularity: 5% [?]

Como trabalhar com Datas no PL-SQL (to_date)

Uma das maiores dificuldades com relação ao gerenciamento e manipulação de bases de dados está relacionado a manipulação de datas, no PL-SQL do Oracle, acho que isso não é um problema. Irei começar com a conversão de string para data (uso da função TO_DATE), mas no Oracle existem várias outras funções de data que são muito fáceis para manipular datas. Abordarei as mesmas em outros artigos.

O TO_DATE recebe 1 parametro obrigatório e dois opcionais como se segue:

to_date( string1, [ format_mask ], [ nls_language ] )

O parametro “string1″ obviamente é a string com o valor que será convertido para a data, ou seja ’01/01/2011′, ou ’2011/01/01′ e muitos outros possíveis dependendo do formato que está configurado no Oracle ou então do formato que você especificar no parametro “format_mask”.

O último parametro, quase não é usado, ele é para definir a linguagem para assim obter qual é o formato padrão daquela lingua.

O parametro “format_mask” será um string com um padrão definido, o qual deve seguir as seguintes opções:

Parametro Explicação
YEAR Ano por extenso
YYYY Ano com 4 digitos
YYY
YY
Y
Ultimos 3, 2 e 1 digitos do ano.
IYY
IY
I
Ultimos 3, 2 e 1 digitos do ano ISO.
IYYY Ano ISO com 4 digitos
RRRR Esse foi o modo de se proteger do “bug do milenio”, ele aceita dois digitos de ano se for abaixo de 49 assume como 20XX, se for acima de 49 assume como 19XX.
Q Trimestre (1 = JAN-MAR, 2 = ABR-JUN, 3 = JUL-SET, 4 = OUT-DEZ).
MM Mes (01-12; JAN = 01).
MON Mes por extenso abreviado.
MONTH Nome do mes por extenso.
RM Mes em algarismos romanos.
WW Semana do ano.
W Semana do mes.
IW Semana do ano com base no Ano ISO.
D Dia da semana.
DAY Dia da semana por extenso.
DD Dia do mes.
DDD Dia do ano.
DY Abreviação do nome do dia.
J Julian day; O número do dia desde 1, de Janeiro de 4712 Antes de Cristo.
HH Hora do dia no formato 1-12.
HH12 Hora do dia no formato 1-12.
HH24 Hora do dia no formato 0-23.
MI Minuto.
SS Segundos.
SSSSS Segundos passados da meia-noite.
FF Milisegundos, indique a quantidade de digitos na frente do FF, por exemplo 4 digitos seria FF4.
AM, A.M., PM, ou P.M. Indicador de hora (Antes do Meio-dia, Pos meio dia)
TZH Hora com fuso.
TZM Minuto com fuso.
TZR Fuso.

 

Com todos esses padrões você pode usar tanto para obter uma informação, como para formatar uma data. No caso do TO_DATE, será só para formatar a data, ou seja, dizer o que você quer que a data contenha. Vamos a exemplos:

Atribuindo uma data simples:


select to_date('01/01/2011','DD/MM/YYYY') from dual;

Veja no código que inclusive a string ‘/’ usada na separação também é utilizada na máscara, funcionando como uma máscara padrão. Esse exemplo irá retornar uma data no formato oracle, com dia, mes e ano informados e horas, minutos zerados.

Formatando uma data com hora:


select to_date('01/01/2011 21:10:05','DD/MM/YYYY HH24:MI:SS') from dual;

Nesse exemplo, já mostra a adição de hora, minuto e segundo.

Creio que com esses exemplos e a tabela de padrões, seja suficiente para fazer várias outras combinações, caso tenha alguma dúvida, por favor é só fazer nos comentários que terei prazer em responder.

Popularity: 7% [?]

Como tratar ORA-00001: unique constraint (constraint_name) violated

O erro “ORA-00001: unique constraint (constraint_name) violated” é causado por uma constraint criada para a tabela que está sendo feita a inserção ou alteração.

Nesse caso uma constraint que não permite haver duplicidade de um ou mais campos numa mesma tabela. Por isso, esses erros podem ser, erro de programação ou definição.

Erro de programação é o caso de o programador não ter feito o código de forma a tratar essa repetição.

No caso de erro por definição é por exemplo, numa tabela de clientes, haver uma constraint para nome, quando há casos de homonimos. Ou seja, pode haver repetições.

Então o que temos que descobrir são esses dois casos, para saber qual é a tabela e as colunas pertencentes a essa constraint, basta pegar o nome da constraint no erro e usar na consulta abaixo:

select *
from all_cons_columns
where constraint_name = 'NOME_DA_CONSTRAINT';

Essa consulta te trará vários campos, mas os mais importantes são TABLE_NAME e COLUMN_NAME, que vão identificar as colunas de que tabela não podem se repetir.

Se for o caso de retirar a constraint o comando é:

alter table NOME_DA_TABELA
drop constraint NOME_DA_CONSTRAINT;

Caso queira tratar a exceção, o que não recomendo, ela pode ser feita como abaixo:

begin
   insert into tabela
   values('VALOR REPETIDO');
exception
   when DUP_VAL_ON_INDEX then
      raise_application_error(-20000,'Entre com um valor diferente.');
end;

Prefira uma solução mais elegante, fazendo o tratamento antes da inserção, ou utilizando o comando merge. Abordarei o mesmo em outro tópico.

Popularity: 4% [?]

Como manipular string em PL/SQL (Oracle)

Muitas vezes precisamos trabalhar com a string, alguns comandos sempre são necessários e básicos para trabalhar com string. No PL-SQL, temos várias funções para auxiliar vamos a algumas delas (mais usadas), lembrando que estou usando string literais, mas poderá ser usado no lugar delas, qualquer campo de tabela ou variável:

TRANSFORMAR EM MAIÚSCULO

Para transformar todos os caracteres da string em maiúsculo é só usar o comando UPPER.

Ex: select upper(‘exEmplO’) from dual;

Esse comando vai retornar ’EXEMPLO’.

PESQUISAR NA STRING

Existem duas formas de pesquisar valores numa string, a função INSTR e o comando LIKE, as aplicações são da forma demonstrada abaixo:

select instr(‘Procurando uma string’,'uma’) from dual;

Esse comando irá retornar a posição da string ‘uma’ na string ‘Procurando uma string’, se for maior que zero então já sabemos que existe uma ocorrencia nessa string.

select 1 from dual where ‘Procurando uma string’ like ‘%uma%’;

Com esse comando retorna TRUE para caso encontrar a ocorrencia, lembrando que % é o indicador curinga.

SUBSTITUIR VALORES

Se além de encontrar um ocorrencia, você quiser substitui-la por outra é só utilizar a função REPLACE.

Ex: select replace(‘Trocando uma string’,'uma’,'a’) from dual;

O retorno dessa consulta seria (‘Trocando a string’).

Popularity: 3% [?]

Como concatenar string no PL-SQL/Oracle

Esse é um comando simples, mas como muda de linguagem para linguagem é sempre bom ter referencias. O simbolo usado para concatenação de strings no Oracle é o PIPE PIPE (||).

Um exemplo:

select ‘Hello ‘ || ‘world’ from dual;

Popularity: 2% [?]

Javascript – Como deixar componentes visíveis e invisiveis

Quando em determinado formulários é necessário exibir ou não exibir determinados componentes, é possível fazer isso “visualmente” via javascript, sem ter que regarregar a tela, ou escrever outro HTML.

Para fazer isso é necessário somente setar a propriedade VISIBILITY do STYLE do componente em questão.

Por exemplo um campo texto poderia ficar da seguinte forma para deixar invisivel:

“document.formulario.texto.style.visibility = ‘hidden’;”

e para exibir

“document.formulario.texto.style.visibility = ‘visible’;”

Lembrando que referenciar qualquer objeto (no nosso caso ‘texto’) é melhor fazer pelo uso de getElementByID.

Quem precisar de mais ajuda para montar o script é só pedir. Deixo um exemplo abaixo para facilitar:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<script>
function disaT(c,f){
if(c.checked){f.txt1.disabled=false}
else{f.txt1.disabled=true}
}
function showT(c,f){
if(c.checked){f.txt2.style.visibility=”visible”}
else{f.txt2.style.visibility=”hidden”}
}

</script>
</head>

<body>
<form>
<input type=”checkbox” onclick=”disaT(this,this.form)”><input name=”txt1″ type=”text” disabled=”true”><br>
<br>
<input type=”checkbox”onclick=”showT(this,this.form)”><input name=”txt2″ type=”text” style=”visibility:hidden”>
</form>
</body>
</html>

Popularity: 2% [?]

Como apagar itens de combo via JavaScript em Páginas

Muitas vezes é necessário apagar o conteúdo de um combo ou lista de um formulário em HTML, ao invés de carregar a página novamente, há como fazer isso dinamicamente através de um script java script, basta você chamar o seguinte trecho (onde cmb1 é seu combo) no evento que você quer que acione a limpeza.

                    for (c1 = cmb1.length-1; c1 >=0; c1– )

                    {

                           cmb1.remove(c1);

                    }

Lembrem-se, é importante manter o FOR de cima para baixo, por isso garante que ele não irá se confundir na remoção dos elementos do array.

Popularity: 1% [?]

Aeromodelismo – Plantas – Jatos – F14

Esta planta em PDF é própria para aeromodelos elétricos feitos em depron/foam. A propulsão dela é por motor a hélice como pusher.

Clique aqui para baixar a planta

Related Posts with Thumbnails

Popularity: 1% [?]

Powered by WordPress | Free T-Mobile phones at BestInCellPhones.com. | Thanks to Verizon Wireless, Facebook Games and The diet solution