PDA

Ver la Versión Completa : Procedimientos Almacenados Oracle 10g


killaskto
06-11-2006, 16:45:01
Hola!

Tengo una gran duda sobre como invocar un procedimiento almacenado desde delphi....:confused:

Estoy trabajando sobre delphi 7 y usando Oracle 10g XE, la conexion la hago mediante un AdoConnection y trato de usar un AdoStoredProc que vincule con el AdoConnetion, ya aparecen los procedimientos de la base, no aparecian parametros y cuando le di en Parameter automaticamente los creo. Estos dos parametros uno In y otro Out, el primero de tipo ftString (numericscale=0,precision=0,size=0)y el segundo ftBDC (numericscale=0,precision=15,size=0).

El procedimiento en oracle es:

CREATE OR REPLACE PROCEDURE PRO_NUEVO_NUMERO(NOMBRE_TABLA IN VARCHAR2,NUEVO_NUMERO OUT NUMBER)
AS
EXISTE NUMBER;
BEGIN
NUEVO_NUMERO:=1;
raise_application_error(-2000,'Entro hasta aqui');
LOOP
EXISTE:=0;
CASE NOMBRE_TABLA
WHEN 'CLIENTES' THEN
EXIT WHEN NUEVO_NUMERO=999;
SELECT COUNT(*) INTO EXISTE FROM CLIENTES WHERE ID_CLIE=NUEVO_NUMERO;
END CASE;
IF(EXISTE=0)THEN
COMMIT;
RETURN;
ELSE
NUEVO_NUMERO:=NUEVO_NUMERO+1;
END IF;
END LOOP;
NUEVO_NUMERO:=0;
COMMIT;
RETURN;
END PRO_NUEVO_NUMERO;

En Delphi lo que hago es que cuando se cree el formulario aparezca en un label el numero que devuelve el segundo parametro de la siguiente manera:

with stpProNuevoNumeroCliente do
begin
Parameters.ParamByName('NOMBRE_TABLA').Value:='CLIENTES';
Prepared:=True;
ExecProc;
NuevoNumeroCliente:=Parameters.ParamValues['NUEVO_NUMERO'];
end;
Label8.Caption:=IntToStr(NuevoNumeroCliente);

Cuando lo ejecuto manda este error: Project El_Barril.exe raised exception class EOleException with message '4f rh'. Process stopped. Use Step or Run to continue.

Paso a paso me doy cuenta que ese error lo genera inmediatamente despues de hacer ExecPorc.......

Si alguien me pudiera corregir o ayudar de antemano le doy las gracias.:)

ramiretor
29-11-2006, 23:35:44
Hola:
Si no mal recuerdo tu código Delphi está bien. Bueno pero regresando al problema, lo que es probable que pase es que el procedimiento te está generando un error (no regresa lo que debería). Por lo que te pregunto ¿lo has corrido desde la base de datos con los mismos parámetros?

Saludos

killaskto
02-12-2006, 21:55:51
Hola ramiretor:

Antes que nada gracias por responderme. Mas vale tarde que nunca.
Continuando con mi problema, el procedimiento lo ejecuto desde el gestor y si devuelve los valores correctos, de hecho tambien lo trate de hacer como funcion pero me manda exactamente el mismo error. Para salir rapido del error comence a usar los componentes de Core Labs para Oracle .Net...
Con estos, hago exactamente lo mismo pero si me devuelven los valores desde delphi. Lastima que son version de prueba por 60 dias porque tengo que implementar mi sistema como trabajo de escuela solo para pasar la carrera :).
De todos modos voy a seguir tratando con los ADO,,, se supone que debe de jalar pero pues por el momento saldre de apuros con los demo. Ahora me estoy rompiendo la cabeza con los reportes en FreeReport. (Por hay si sabes algo te agradeceria tu ayuda en otro foro...)

Gracias...