Передача массива из РНР в Оракл без преобразований в строку

Влад

Новичок
Передача массива из РНР в Оракл без преобразований в строку

Возможно передать массив из РНР в Оракл процедуру, без преобразований оного в строку с разделителями в РНР
и затем парсирования ее Оракле?

в Оракле:

TYPE array_in IS TABLE OF VARCHAR2(10)
INDEX BY BINARY_INTEGER;

PROCEDURE input_array(arr IN array_in);

в РНР:

?
 

Фанат

oncle terrible
Команда форума
Попробуйте ответить на этот вопрос самостоятельно.
Что есть переменная в программе?
в физическом, так сказать, смысле?
 

Влад

Новичок
>Что есть переменная в программе?
>в физическом, так сказать, смысле?

наверное какой-то кусочек оперативной памяти?

нашел что-то в инете
а кто-то пробовал через "declare", как ниже описано?



http://marc.theaimsgroup.com/?l=php-db&m=102169380328627&w=2

List: php-db
Subject: [PHP-DB] Re: passing php array to an Oracle function
From: 217.229.57.174
Date: 2002-05-18 3:49:56
[Download message RAW]

i cannot get this to work.
seems there's no way binding an array directly,
at least if it's of such an object type. If anyone knows a
way, i'd appreciate any advice.
But I found a solution:

$query = "declare
my_array Test_Pkg.test_array_type;
begin";

and then i loop through my php array, extending the $query string which sets
elements for my_array in the sql.
when i execute this, it works properly.

Regards Michael

"Michael Virnstein" <[email protected]> schrieb im Newsbeitrag
news:[email protected]...
> Hope there's any Oracle Guru around. :)
>
> Oracle 8.1.7:
> Asuming that I have the following object type:
>
> Create or Replace Type Test_Table_type as object (PK number(10,0),
>
> name varchar2(100));
>
> and that I have the following package:
>
> Create Package Test_Pkg
> Is
>
> Type test_array_type is varray(10) of Test_Table_Type;
>
> Function TestFunc(in_array IN test_array_type)
> Return number;
>
> End;
>
> and i want to call the function like this from php:
>
> $query = "begin :result := Test_Pkg.TestFunc:)array); end;";
>
> and bind a php array to the :array variable.
>
> Is this possible?
> If yes, what should the array look like?
> If not, how should i do it then?
>
> Any sample code would be really great.
>
> Regards Michael
 

tony2001

TeaM PHPClub
вернуть коллекцию из stored proc и добавить в неё элементы из массивы.
 

Влад

Новичок
Фанат
подскажи плз, не могу понять, что он с этой строчкой делает?
$query = "declare
my_array Test_Pkg.test_array_type;
begin";

как он ее дальше использует в РНР коде?

он объявляет массив, заполняет его по одному элементу,
а потом использует в своей функции?
 

Фанат

oncle terrible
Команда форума
мне кажется, что да.
я не работал с ораклом никогда.
я просто понимаю, что переменная - это область памяти. Причем программа может трактовать эту область как угодно. причем программы могут быть вообще физически на разных компьютерых.
Поэтому я слабо себе представляю, как можно передать переменную напрямую.
другое дело, сформировать строку, которая в другой программе будет трактована, как объявление переменной.
 

Влад

Новичок
4 Фанат
>Поэтому я слабо себе представляю, как можно передать переменную напрямую.
А я совсем не представляю как они там понимают друг-друга, для этого есть php_oci8.dll :)

4 tony2001
если по шагам:
1) возвращаем коллекцию с пустым массивом в РНР
2) заполням массив
3) отдаем stored proc коллекцию с заполненым массивом
правильно ли я понял?
 

Фанат

oncle terrible
Команда форума
Влад
Мне всегда казалось, что понимают они друг друга посредством языка SQL
разве не для этого он был придуман?
 

tony2001

TeaM PHPClub
>если по шагам:
>1) возвращаем коллекцию с пустым массивом в РНР
да. OUT, насколько я помню.

>2) заполням массив
заполняем коллекцию элементами массива.
см. collection->append()

>3) отдаем stored proc коллекцию с заполненым массивом
>правильно ли я понял?
нет, никуда отдавать не надо, просто oci_commit();
 

Влад

Новичок
4 Фанат
извени Фанат, но я в этих тонкостях не разбираюсь :( ,
спорить не буду

-~{}~ 31.12.04 16:58:

4 tony2001

спасибо tony2001, буду пробовать
 
Сверху