Надеюсь, вы мне поможете, мне нужно получить данные SQL-запроса в Oracle 11g, одно из его полей - тип курсора, это запрос:
SELECT m.nombre, m.icono, (CURSOR(SELECT p.nombre nombre_permiso, p.url
FROM permiso p
WHERE p.fk_menu = m.pk_menu
AND p.estado = 'A'
ORDER BY p.orden)) permisos FROM menu m WHERE m.estado = 'A' ORDER BY orden;
Когда я выполняю его с PHP, поле namepermiso появляется как тип ResourceId, но оно должно дать мне содержащиеся в нем поля, я полагаю, это тип поля, код PHP, который я использую, следующий:
$sql = "DECLARE
my_cursor SYS_REFCURSOR;
BEGIN
OPEN my_cursor FOR SELECT m.nombre, m.icono, (CURSOR(SELECT p.nombre nombre_permiso, p.url
FROM permiso p
WHERE p.fk_menu = m.pk_menu
AND p.estado = 'A'
ORDER BY p.orden)) permisos
FROM menu m
WHERE m.estado = 'A'
ORDER BY orden;
:cursor := my_cursor;
END; ";
$conn = $this->db->conn_id;
$curs = oci_new_cursor($conn);
$stid = oci_parse($conn, $sql);
oci_bind_by_name($stid, ":cursor", $curs, -1, OCI_B_CURSOR);
oci_execute($stid);
oci_execute($curs);
while (($row = oci_fetch_array($curs, OCI_ASSOC + OCI_RETURN_NULLS)) != false)
{
var_dump($row);
}
oci_free_statement($stid);
oci_free_statement($curs);
var_dump показывает это:
array(3) { ["NOMBRE"]=> string(16) "Parametrización" ["ICONO"]=> string(11) "fa fa-gears" ["PERMISOS"]=> resource(46) of type (oci8 statement) } array(3) { ["NOMBRE"]=> string(24) "Gestión de información" ["ICONO"]=> string(10) "fa-sitemap" ["PERMISOS"]=> resource(47) of type (oci8 statement) }
Большое спасибо!