La Web del Programador: Comunidad de Programadores
 
    Pregunta:  60140 - COMO LLAMO STORE PROCEDURA ORACLE CON ASP
Autor:  Alexis Adrovez
tengo un package al cual contiene 2 procedimentos almacenados, uno de ellos encargado de insertar datos a la tabla.

El procedimiento o package lo he podido compilar en el toad y me funciona perfecto. El problema es cuando lo llamo desde asp, me da el siguiente error

-2147217900
ora-06550: line 1, column 7: pls-00306: wrong number or types of arguments in call to 'ingresa_pedido' ora-06550: line 1, column 7: pl/sql: statement ignored

este es el codigo asp

set conn = server.createobject("adodb.connection")
conn.open cadenaconexion
set pobjrec = server.createobject( "adodb.recordset" )
set pobjcom = server.createobject( "adodb.command" )

vvar_nombre = "alexis"
vvar_direccion = "aki"
vvar_id_comuna =1
vvar_id_ciudad = 1
vvar_id_cliente = 1
vvar_id_producto = 1
vvar_id_trabajo = 1
vvar_fecha ="01/01/1900"
vvar_plazo_cotizacion = 3
vvar_observacion ="hola"
vvar_modifica_suministro = 1

with pobjcom
.activeconnection = conn
.commandtext = "pkg_actualiza_pedido.ingresa_pedido"
.commandtype = 4
.parameters.refresh
.parameters("@var_nombre") = vvar_nombre
.parameters("@var_direccion") = vvar_direccion
.parameters("@var_id_comuna") = vvar_id_comuna
.parameters("@var_id_ciudad") = vvar_id_ciudad
.parameters("@var_id_cliente") = vvar_id_cliente
.parameters("@var_id_producto") = var_id_producto
.parameters("@var_id_trabajo") = vvar_id_trabajo
.parameters("@var_fecha") = vvar_fecha
.parameters("@var_plazo_c

  Respuesta:  Mar
Hola. Ante todo los nombres de los parámetros deben ser ls mismos que en el procedimiento, si no te fallará. Si ésto lo tienes así, yo lo hago de la siguiente forma:
Desde el ASP llamas a una función que será la que llame al procedimiento almacenado de la forma:

function nombre(parametros_entrada,parametros_salida )

Set cmdStoredProc = Server.CreateObject("ADODB.Command")
Set cmdStoredProc.ActiveConnection = ConexBD
donde ConexBD es la conexion a la BD

Ahora llamas al procedimiento almacenado de la forma:
cmdStoredProc.CommandText = "Nombre_Paquete.NombreProcedure"
cmdStoredProc.CommandType = 4

Creas lo parametros de entrada de la forma (en caso de que los tuviera);
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(Name, Type , Direction , Size, Value )
Tantas veces como parámetros haya (de entrada y de salida)
Ejecutamos el procedure;
cmdStoredProc.Execute

y recogemos los de salida en caso de que los haya:

parametro_salida = cmdStoredProc.Parameters("campo").value

Set cmdStoredProc = nothing
end function

Espero haberte ayudado

  Respuesta:  Alexis Adrovez
Intente ejecutar el procedimiento como mencionasta

Set conn = Server.CreateObject("ADODB.Connection")

conn.open cadenaConexion


Set cmdStoredProc = Server.CreateObject("ADODB.Command")
Set cmdStoredProc.ActiveConnection = conn


'Ahora llamas al procedimiento almacenado de la forma:
cmdStoredProc.CommandText = "Pkg_actualiza_pedido.Ingresa_Pedido"
cmdStoredProc.CommandType = 4
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_NOMBRE, 200 , 1 , , "Prueba" )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_DIRECCION, 200 , 1 , , "Prueba" )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_ID_COMUNA, 130 , 1 , , 1 )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_ID_CIUDAD, 130 , 1 , , 1 )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_ID_CLIENTE, 130 , 1 , , 1 )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_ID_PRODUCTO, 130 , 1 , , 1 )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_ID_TRABAJO, 130 , 1 , , 1 )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_FECHA, 200 , 1 , , "01/01/1900" )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_PLAZO_COTIZACION, 130 , 1 , , 3 )
cmdStoredProc.Parameters.Append cmdStoredProc.CreateParameter(var_OBSERVACION, 200 , 1 , , "hola" )


'Ejecutamos el procedure;
cmdStoredProc.Execute


Pero no me resulto.......

Intente de la siguiente forma y me resulta solo para procedimientos que tengan como objetivo Insertar o Modificar.

SQL = Nombre_Paquete.Procedure(var1,var2,varN)

conexion.execute(SQL)

De esta forma he podido ejecutar un procedimiento almacenado en Oracle...pero solo para Insertar o Modificar ya que priden parametros de Entrada.

Lo que es consulta de datos los cuale me retorna varios registro no me sirve....la vedad ya no se ke hacer...primera vez que me pasa algo asi....ya que con ASP.NET no tengo ningun problema.

gracia.