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


0