Oracle - procedimientos almacenados

 
Vista:

procedimientos almacenados

Publicado por julio (2 intervenciones) el 12/03/2008 16:57:58
buenas:
Estoy haciendo una aplicacion para consultar clientes de visual fox pro 9 con ado y con la base de datos oracle10g y tengo que crear un procedimiento almacenado en oracle
el flujo es el siguiente
ingreso un codigo=1254
el procedimiento debe devolverme
nombre,apellido,estado,fecha_naci

este un ejemplo que he hecho:
----------------------------------------------------------------
create or replace PROCEDURE my_first_proc (codi in VARCHAR2,
var_codigo OUT varchar2,
var_DESTINO OUT varchar2,
var_LLEGADA OUT varchar2)
AS
var_codigo1 varchar2(100);
var_DESTINO1 varchar2(100);
var_LLEGADA1 varchar2(100);
BEGIN
SELECT CODI,DESTINO,LLEGADA INTO var_codigo1,var_DESTINO1,var_LLEGADA1
FROM ACTI WHERE RTRIM(CODI)=RTRIM(codi);
var_codigo:=var_codigo1;
var_DESTINO:=var_DESTINO1;
var_LLEGADA:=var_LLEGADA1;
END;
y asi lo ejecuto el oracle el procedimiento:
-----------------------------------------------------------------
DECLARE
var_codigo varchar2(100);
var_DESTINO varchar2(100);
var_LLEGADA varchar2(100);
VAR_COD VARCHAR2(10):='4';
BEGIN
my_first_proc( VAR_COD ,var_codigo, var_DESTINO, var_LLEGADA );
DBMS_OUTPUT.PUT_LINE(RTRIM(var_codigo )|| ', ' ||RTRIM(var_DESTINO) || ', ' || RTRIM(var_LLEGADA) );
END;
--------------------------------------------------------------
y de l visual fox 9 lo instancio asi, pero me sale error.
------------------------------------------------------------------
LOCAL Micomamd as "ADODB.command"
Micomamd = CREATEOBJECT( "ADODB.command" )
XCONN = "Provider=OraOLEDB.Oracle.1;Password=123;Persist Security Info=True;User ID=admin;Data Source=jgomez"
Micomamd.ActiveConnection = XCONN
Micomamd.CommandText = "my_first_proc"
Micomamd.CommandType = 4
Micomamd.Parameters.Append ( Micomamd.CreateParameter( "VAR_COD" , 129, 1, 10, '1' ))
Micomamd.Parameters.Append ( Micomamd.CreateParameter( "var_codigo" , 129, 1, 100 ))
Micomamd.Parameters.Append ( Micomamd.CreateParameter( "var_DESTINO" , 129, 1, 100 ))
Micomamd.Parameters.Append ( Micomamd.CreateParameter( "var_LLEGADA" , 129, 1, 100 ))
Micomamd.Execute()
wait windows Micomamd.Parameters( "var_codigo" ).Value
wait windows Micomamd.Parameters( "var_DESTINO" ).Value
wait windows Micomamd.Parameters( "var_LLEGADA" ).Value
y me sale error
ole idispatch exception code 0 from oraoledb:ORA-06502:
pl/SQL: ERROR: BUFFER DE CADENAS DE CARACTERES DEMASIADO PEQUEÑO NUMERICO O DE VALOR
------------------------------------------------------------------
¿hay otra forma de hacer un procedimiento que me devuelva una fila de registros para tomarlo en un recordset y no usar el ado.command?
aver si alguien me puede ayudar con alguna idea no importa si es en visual basic
gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder