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.
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


0