PHP - OCI ORACLE LLAMADA PACKAGE (URGENTE)

 
Vista:

OCI ORACLE LLAMADA PACKAGE (URGENTE)

Publicado por Fernando (2 intervenciones) el 27/09/2016 10:01:58
Hola buenos días,

Primero de todo daros las gracias por ayudarme con mi problema. Llevo varios días atascado con este problema y no veo solución.

Estoy invocando una procedure que está en un Packake de Oracle via PHP + OCI. La llamada la realizo correctamente, pero la salida completa no soy capaz de tratarla. El procedimiento tiene varios campos de salida, 2 son de tipo básioc (numbers) donde los obtengo sin problemas, pero hay 1 que tipo “complex type” que es imposible (para mi).

Tengo el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//conexion
$conn = oci_connect($user, $password, $tns);
 
//sql
$sql = "BEGIN
    WS_PAYMENT.GETPAYMENTDATA(
    :LEADID,                           //IN NUMBER
    :SOURCE,                        //IN NUMBER
    :PVP,                                  //OUT NUMBER
    :RATES,                            //OUT NUMBER
    :PAYMENTSFRACCIONADO);          //OUT DATA TIPO DE ORACLE
   END;";
 
$stmt = oci_parse($conn,$sql);
 
$leadid = 611193;
$source = 1;
$pvp = 0;
$rates = 0;
$paymentsfraccionado = oci_new_collection($conn, "WS_ST_PAYMENTS");
 
 
//En la base de datos de oracle, en el body del packge, encontramos la siguiente definición:
/*
PaymentsFraccionado	OUT WS_ST_PAYMENTS

Donde si miramos la definición del Tipo de dato WS_ST_PAYMENTS esta definida, a su vez,  como una tabla:
create or replace TYPE WS_ST_PAYMENTS 
IS TABLE OF WSARRAY_PRODUCTPAYMENTS;
*/
 
// una vez dicho esto, sigo:
 
oci_bind_by_name($stmt,':LEADID',$leadid);
oci_bind_by_name($stmt,':SOURCE',$source);
oci_bind_by_name($stmt,':PVP',$pvp, -1, SQLT_INT);
oci_bind_by_name($stmt,':RATES', $rates, -1, SQLT_INT);
oci_bind_by_name($stmt,':PAYMENTSFRACCIONADO', $paymentsfraccionado, -1, SQLT_NTY);
 
//Ejecuto
$result = oci_execute($stmt);
 
//Recuperando la salida
echo "<pre>PVP: ".$pvp."</pre>";       //RESULTADO CORRECTO
echo "<pre>RATES: ".$rates."</pre>";    //RESULTADO CORRECTO
 
for ($i = 0; $i < $paymentsfraccionado->size(); $i++) {
    $$payments = $paymentsfraccionado->getElem($i);   //INCORRECTO ME DEVUELVE VALOR NULO!
}

¿Cómo puedo obetener los datos de $paymentsfraccionado?

El problema es que si hago un dump de la variable "$paymentsfraccionado" me indica que es:

object(OCI-Collection)#1 (1) { ["collection"]=> resource(4) of type (oci8 collection) }

o si hago un prin_r($paymentsfraccionado, true) del contenido de la variable me devuelce lo siguiente:
OCI-Collection Object
(
[collection] => Resource id #4
)


No consigo poder recorrer ni obtener los resultados que hay en la estructura de datos de "$paymentsfraccionado".


Llevo ya varios días sin conseguirlo. Necesito vuestra ayuda! Os pido por favor si alguien sabe como solucionar esto que se ponga en contacto conmigo es urgente y no veo como poder hacerlo.

Muchas gracias de verdad.
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

OCI ORACLE LLAMADA PACKAGE (URGENTE)

Publicado por Fernando (2 intervenciones) el 27/09/2016 16:36:22
Tengo un erro de copy/paste:
$$payments = $paymentsfraccionado->getElem($i);
en realidad es:
$payments = $paymentsfraccionado->getElem($i);

Es un error de copy/paste... pero ese no es el problema....

No encuentro como poder obtener lo datos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

OCI ORACLE LLAMADA PACKAGE (URGENTE)

Publicado por Daniel (1 intervención) el 26/02/2018 09:10:48
Que tal Fernando,

Tengo el mismo problema! Pudistes solucionarlo? Haber si me comentas.

Gracias de antemano.

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

OCI ORACLE LLAMADA PACKAGE (URGENTE)

Publicado por Jose (1 intervención) el 07/10/2020 00:28:59
pudistes resolver este tema? necesito ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar