如何在PHP中迭代Oracle Query Cursor字段?

时间:2018-09-05 12:47:31

标签: oracle11g php-7

希望您能对我有所帮助,我需要获取Oracle 11g中SQL查询的数据,它的其中一个字段是游标类型,这是查询:

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执行它时,字段名permiso会显示为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) } 

非常感谢您!

0 个答案:

没有答案