ID:               26738
 User updated by:  mbaranidharan at yahoo dot com
 Reported By:      mbaranidharan at yahoo dot com
 Status:           Assigned
 Bug Type:         OCI8 related
 Operating System: *
 PHP Version:      4.3.4
 Assigned To:      tony2001
 New Comment:

Hi is there a solution available for this prob. Pls let me know.

I have a c++ code which uses oracle OCI library to call the package and
get me the result as array. Is there any detailed example available to
create php extension in c++ which returns a array. Pls let me know.

Thanks


Previous Comments:
------------------------------------------------------------------------

[2004-01-21 23:49:13] mbaranidharan at yahoo dot com

according to my requirement iam not supposed to modify any existing
package or procedure.It is strict that my out parameter is a plsql
table type. When u try creating a type like that below is the result.



SQL> create type tblEmpNo IS TABLE OF NUMBER(4) INDEX BY
BINARY_INTEGER;

  2  /



Warning: Type created with compilation errors.



SQL> show error

Errors for TYPE TBLEMPNO:



LINE/COL ERROR

--------
-----------------------------------------------------------------

0/0      PL/SQL: Compilation unit analysis terminated

1/18     PLS-00355: use of pl/sql table not allowed in this context



one more thing i would like to say is bcoz of this prob i created a
wrapper for this package in oracle which will take in plsql table and
return me a ref cursor which works fine with PHP. But this i have kept
is as a temporary solution. I need to solve it from PHP front. 



In OCIBindByname binding an array type is giving the problem. I checked
in the other forums and i saw the same problem with other people too
and this is open from year 2000 and is not solved.

------------------------------------------------------------------------

[2004-01-21 10:05:13] [EMAIL PROTECTED]

This can be definitely done with collections.

First, you need to create name type:

create type employee(id INTEGER, name VARCHAR2, job VARCHAR2); -- for
example

then in PL/SQL:

PROCEDURE EmployeeSearch 

   (i_EName IN VARCHAR2, 

    employee_var OUT employee

    ) 

IS

BEGIN 

--seeking for 

--matching emplyees...

   employee_var := employee(123,"name","job");

END EmployeeSearch;



and in PHP you should do smthng like this:

<?php

$connection = oci_connect("user","pass","server");

$statement = oci_parse($connection,"

                        declare

                        Begin

                                Package.EmployeeSearch('e',:empl);

                        End;

                ");

        

$empl = oci_new_collection($connection,"EMPLOYEE"));

oci_bind_by_name($statement,":var1", $var1, -1, OCI_B_SQLT_NTY);



oci_execute($statement);

echo $empl->getelem(0);

//etc...

?>



Currently oci_collection_element_get() doesn't support subcollections,
so I assign this bug to myself.

Will add this possibility soon.

------------------------------------------------------------------------

[2004-01-19 01:12:32] mbaranidharan at yahoo dot com

but in my case iam trying to return a plsql table type from the
procedure. So i cant create a type of plsql table outside which oracle
wont allow.

So can't use ocinewcollection and ocicoll* functions.

pls try to create the packages i have send and check.

-

Thanks

------------------------------------------------------------------------

[2004-01-15 08:40:39] [EMAIL PROTECTED]

Aha, I got your point at least. It seems, that you need to use
ocinewcollection() and other ocicoll*() functions to work with these
user-defined types.

------------------------------------------------------------------------

[2004-01-13 23:16:56] mbaranidharan at yahoo dot com

my procedure does not return any cursor here it will return a pl/sql
table. Its using cursor to fetch data and populate into pl/sql table.
Basically the error come when i try to bind an array to variable. Look
at my procedure below

PROCEDURE EmployeeSearch 

   (i_EName IN VARCHAR2, 

    o_EmpNo OUT tblEmpNo, 

    o_EName OUT tblEName, 

    o_Job OUT tblJob); 

END Employee_Pkg;

it takes in one parameter and returns 3 out parameters which is of
table type not cursor.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/26738

-- 
Edit this bug report at http://bugs.php.net/?id=26738&edit=1

Reply via email to