php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #47081 OCI-Collection returns null for object array
Submitted: 2009-01-12 23:26 UTC Modified: 2009-03-13 23:41 UTC
Votes:3
Avg. Score:5.0 ± 0.0
Reproduced:3 of 3 (100.0%)
Same Version:3 (100.0%)
Same OS:2 (66.7%)
From: lan dot zhou at emagineinternational dot com Assigned: sixd (profile)
Status: Not a bug Package: OCI8 related
PHP Version: 5.2.8 OS: windows
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: lan dot zhou at emagineinternational dot com
New email:
PHP Version: OS:

 

 [2009-01-12 23:26 UTC] lan dot zhou at emagineinternational dot com
Description:
------------
I have a procedure which returns an object array. When I call this procedure from PHP, and bind an OCI-Collection type object to that output parameter, the PHP object contains the right number of the elements after executing the procedure, but all the elements are NULL.

Reproduce code:
---------------
$nty = oci_new_collection($db, 'objectArray');

$stmt = oci_parse($db, 'BEGIN getObjectArray(output); END;');

oci_bind_by_name($stmt, 'output', $nty, -1, OCI_B_NTY);

oci_execute($stmt, OCI_DEFAULT);

for ($i = 0, $len = $nty->size(); $i < $len; $i++) {
    var_dump($nty->getElem($i));
}

$nty->free();

oci_commit($this->_db);

Expected result:
----------------
the content of the objects in the object array which is returned from the procedure ( the return array is not null when I executed the procedure in sql developer)

Actual result:
--------------
NULL

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-01-13 20:07 UTC] sixd@php.net
Can you upload the SQL script to create the type and procedure?
 [2009-01-14 05:16 UTC] lan dot zhou at emagineinternational dot com
CREATE OR REPLACE
TYPE PERSON_TYPE
AS OBJECT ( ID NUMBER(10), NAME VARCHAR2(50), AGE NUMBER,
  CONSTRUCTOR FUNCTION PERSON_TYPE
  RETURN SELF AS RESULT);


CREATE OR REPLACE
TYPE BODY PERSON_TYPE AS
  CONSTRUCTOR FUNCTION PERSON_TYPE
    RETURN SELF AS RESULT
  AS
  BEGIN
    RETURN;
  END;
END;


CREATE OR REPLACE
TYPE ARRAY_PERSON_TYPE IS TABLE OF PERSON_TYPE;
 [2009-01-14 05:18 UTC] lan dot zhou at emagineinternational dot com
CREATE OR REPLACE PROCEDURE GET_PERSON (PARRAY OUT ARRAY_PERSON_TYPE) AS
 ARRPERSON ARRAY_PERSON_TYPE := ARRAY_PERSON_TYPE();

 FUNCTION CREATEPERSON (ID NUMBER, NAME VARCHAR2, AGE NUMBER) 
  RETURN PERSON_TYPE IS
    PERSON PERSON_TYPE := PERSON_TYPE();
 BEGIN
    PERSON.ID := ID;
    PERSON.NAME := NAME;
    PERSON.AGE := AGE;
    RETURN PERSON;
 EXCEPTION WHEN OTHERS THEN
  NULL;    
 END;    

BEGIN
 ARRPERSON.DELETE;
 ARRPERSON.EXTEND(2);
 ARRPERSON(1) := CREATEPERSON(1, 'LAN', 27);
 ARRPERSON(2) := CREATEPERSON(2, 'ZHOU', 72);
 PARRAY := ARRPERSON;
EXCEPTION WHEN OTHERS THEN
END;
 [2009-01-20 04:06 UTC] lan dot zhou at emagineinternational dot com
any feedback on this issue?

thanks
 [2009-03-13 23:41 UTC] sixd@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

This is a known limitation of OCI8.  Code patches to improve this area are welcome. Consider using a mapping function to create a simple types or a varray.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Fri Mar 14 08:01:32 2025 UTC