Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Oracle
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-06-2003
Isabel Isabel is offline
Miembro
 
Registrado: jun 2003
Posts: 15
Poder: 0
Isabel Va por buen camino
Question Problemas con package dbms_crypto_toolkit

Hola a todos!!!
Quiero insertar valores en una tabla de manera q cuando el valor de uno de los campos sea nulo insertar un valor aleatorio. El código q he implementado en PL/SQL para hacer esto es el sgte:

create sequence IdCodeSeq;

create or replace function GeneraCodigo
return integer as
code INTEGER;
num INTEGER;
seed BINARY_INTEGER;
begin
SELECT IdCodeSeq.NextVal INTO seed FROM Dual;
dbms_random.initialize(seed*1000);
code := dbms_random.random;
SELECT Count(*) into num FROM Tabla WHERE ID=code;
while num=0 LOOP
code := dbms_random.random;
select count(*) into num from Tabla where ID =code;
end loop;
dbms_random.terminate;
RETURN code;
end;
/

create or replace trigger BITabla
before insert on Tabla for each row
begin
if :new.Id is null then
:new.Id := GeneraCodigo;
end if;
end;
/

Y el mensaje de error que me aparece es el siguiente:
SQL> insert into tabla values(null);
insert into tabla values(null)
*
ERROR en línea 1:
ORA-06521: PL/SQL: Error al crear la correspondencia de la función
ORA-06512: en "USERP.DBMS_CRYPTO_TOOLKIT", línea 23
ORA-06512: en "USERP.DBMS_CRYPTO_TOOLKIT", línea 962
ORA-06512: en "USERP.DBMS_RANDOM", línea 15
ORA-06512: en "USERP.GENERACODIGO", línea 9
ORA-06512: en "USERP.BITABLA", línea 4
ORA-04088: error durante la ejecución del disparador 'USERP.BITABLA'

donde UserP es un usuario con el rol dba asignado y propietario de la tabla en la q quiero hacer la inserción.

Qué estoy haciendo mal?
Muchas gracias a todos por vuestra ayuda y sugerencias.
Hasta pronto,
Isabel
Responder Con Cita
  #2  
Antiguo 20-06-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
No entiendo exactamente que queres conseguir....

Además, todos los mensajes de error que has enviado parecen ser producto de un error "primario" que no se está viendo....

Porque no tratás de cambiar un poco tu rutina que genera el código aleatorio. Segun veo, queres generar un código para el que ya exista algún valor agregado a la tabla??

Es eso necesario???

que pasará cuando la tabla este vacia... nunca saldrá del ciclo...


Además, podrias agregar a tu procedure unas llamadas a dbms_output.Put_line, o un manejo de errores.

Que versión de Oracle utilizas... porque los métodos initialize, random y terminate están obsoletos ahora...

He revisado el package dbms_random y no eleva ninguna excepción....

porque no me envias la estructura completa de la tabla con triggers y stored procedures para poder hacer una prueba??

hasta luego.

ah... además te recomiendo el uso de la étiqueta [ CODE ] (sin los espacios...) con lo que podes conseguir un resultado como el siguiente:

Código:
create or replace function GeneraCodigo
  return integer as 
  code INTEGER;
  num INTEGER;
  seed BINARY_INTEGER;
begin
  SELECT IdCodeSeq.NextVal INTO seed FROM Dual;
  dbms_random.initialize(seed*1000);
  code := dbms_random.random;
  SELECT Count(*) into num FROM Tabla WHERE ID=code;
  while num=0 LOOP
    code := dbms_random.random;
    select count(*) into num from Tabla where ID =code;
  end loop;
  dbms_random.terminate;
  RETURN code;
end;
/
hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 24-06-2003
Isabel Isabel is offline
Miembro
 
Registrado: jun 2003
Posts: 15
Poder: 0
Isabel Va por buen camino
El problema no está en la rutina, no digo q el código del procemiento o del trigger esté bien, pero la cuestión es q simplemente si hago una llamada a cualquier función del paquete dbms_random me da el siguiente error:

SQL> exec dbms_random.initialize(1234);
begin dbms_random.initialize(1234); end;

*
ERROR en línea 1:
ORA-06521: PL/SQL: Error al crear la correspondencia de la función
ORA-06512: en "SYS.DBMS_CRYPTO_TOOLKIT", línea 23
ORA-06512: en "SYS.DBMS_CRYPTO_TOOLKIT", línea 962
ORA-06512: en "SYS.DBMS_RANDOM", línea 15
ORA-06512: en línea 1

con lo cual no puedo comprobar si el resto del código está bien o no porque no es capaz de hacer la llamada a las funciones de este paquete.
Responder Con Cita
  #4  
Antiguo 25-06-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Pues yo lo he probado con un oracle 8.1.7 sobre windows NT y ha funcionado bien, así que creo que se puede suponer que se trata de un problema de instalación, o bien que tengas alguna configuración no estándar que se te ha olvidado comentar.

El package que te está dando problema es el Oracle Cryptographic Toolkit, pero no veo por donde tenga que ver con la generación de números aleatorios. Al revés, el DBMS_CRYPTO_TOOLKIT utiliza el DBMS_RANDOM para generar sus propios números aleatorios, y yo ni siquiera lo tengo instalado en mi sistema.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 25-06-2003
Isabel Isabel is offline
Miembro
 
Registrado: jun 2003
Posts: 15
Poder: 0
Isabel Va por buen camino
Pues yo tengo la versión personal de Oracle 8 para Windows NT. Y no tengo ni idea de qué es lo q puede estar fallando. Antes de usar el paquete he ejecutado los sgtes scripts y no me ha dado ningún fallo:

1. utlraw.sql
2. prvtrawb.plb
3. dbmsoctk.sql
4. prvtoctk.plb
5. dbmsrand.sql

Tu has tenido q compilar algún paquete, cambiar algo de la configuración o algo?
Llevo con esto un montón de tiempo y me estoy volviendo loca pq no sé qué más puedo hacer. Así es q cualquier sugerencia por trivial q parezca me puede venir bien.
Muchas gracias por todo,
Silvia
Responder Con Cita
  #6  
Antiguo 25-06-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Fijate que yo no he hecho ninguna configuración especial... ni recompilado paquetes, ni ejecutado scripts de configuración, sino que la instalación y el setup de la base de datos lo hice todo con el asistente.

Yo te aconsejo que lo reinstales, pues ya busque por toda la documentación de Oracle y no encontré mayor referencia al problema que te está dando.

Que versión específica es la que tenes instalada??

Lamento no poder ayudarte mas por ahora...

Hasta luego

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 27-06-2003
Isabel Isabel is offline
Miembro
 
Registrado: jun 2003
Posts: 15
Poder: 0
Isabel Va por buen camino
El hecho de q te intereses por mi problema y aportes posibles motivos de error ya es mucha ayuda para mí, gracias.

De todas formas después d dar muchas vueltas y preguntar por ahí me han dicho q por lo visto hay un problema con Oracle 8.0 (Bug#520154) para versiones inferiores a la 8.0.5 q hace q aparezca este error, y como yo tengo instalada la 8.0.3 supongo q puede ser ese el problema. Intentaré bajarme otra versión posterior a ver si eso soluciona el problema.

Bye,
Isabel
Responder Con Cita
  #8  
Antiguo 04-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Me alegra que hayas encontrado la fuente de tus problemas.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:24:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi