FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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; /
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
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 |
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
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 |
#7
|
|||
|
|||
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 |
#8
|
||||
|
||||
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 |
|
|
|