Как перебрать поле Oracle Query Cursor в PHP? - PullRequest
0 голосов
/ 05 сентября 2018

Надеюсь, вы мне поможете, мне нужно получить данные 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) } 

Большое спасибо!

...