php array into oracle?

Ganer

Новичок
php array into oracle?

Как в сторед процедуру передать пхпшный массив строк ?
 

Ganer

Новичок
массив. строку парсить лень.

вообще смысл - есть большой массив в рхр в котором хранятся рег номера фирм их нужно запихнуть в селект типа and regno in (номера).
номеров очень много, тогда решил делать из них темпорари табле и с ней джоинить в запросе.
т.е. вопрос как по человечески масив в таблицу запихнуть.
 

oson

Guest
У меня та же проблема-не нашел ответ пока?
 

trent

Developer
напиши в хранимке свой unserialize, а в параметр подавай сериализованные данные
 

oson

Guest
Вот хочу передать в процедуру сразу массив из php-
типа:
CREATE OR REPLACE PACKAGE phpArr AS
TYPE t_StIDArr IS TABLE OF students.ID%TYPE
INDEX BY BINARY_INTEGER;
v_StIDArr t_StIDArr;

PROCEDURE InsArr2(p_id IN v_StIDArr%TYPE, v_Totl OUT NUMBER);
END phpArr;

CREATE OR REPLACE PACKAGE BODY phpArr AS
PROCEDURE InsArr2(p_id IN v_StIDArr%TYPE, v_Totl OUT NUMBER)
IS
BEGIN
v_Totl := p_id.COUNT;
END InsArr2;
END phpArr;

Как же туда массив передать на вход?
Делаю из php типа
$sth = OCIParse( $conn,"BEGIN phpArr.InsArr2:)id, :totl); END;" );
$id = array(10,20,30);
OCIBindByName ( $sth, ":id", $id, 100 );
OCIBindByName ( $sth, ":totl", $totl, 100 );
OCIExecute ( $sth );
но по-моему я чегщ-тщ не доганяю?
 

oson

Guest
trent - sorry - а по-русски это как?
Обьясни пожалуйста!
 

Ganer

Новичок
Автор оригинала: trent
напиши в хранимке свой unserialize, а в параметр подавай сериализованные данные
а смысл ? я ж тогда ограничен 4000 варчара ... или нет у pl/sql есть ограничения на varchar2 ?
щас я в цлоб пихаю, но ет времянка через задницу.

а у меня список только из 6000 номеров.

2озон: сериализация это грубо говоря весь масив/объект сваливается в строку с разделителем (ну и описанием типов)
 

trent

Developer
В php делаешь [m]serialize[/m] или просто [m]implode[/m] c разделителем, передаешь эту строку в процедуру. В процедуре пишешь свою реализацию unserialize - обратное преобразование строки в массив.
 

trent

Developer
varchar2 ограничен 4000
используй CLOB
правда можешь наткнутся на такую штучку :) http://bugs.php.net/bug.php?id=24278
обойти можно через temp таблицу, в которую можно положить clob, а в процедуру отдать id
 

Ganer

Новичок
Автор оригинала: trent
varchar2 ограничен 4000
используй CLOB
правда можешь наткнутся на такую штучку :) http://bugs.php.net/bug.php?id=24278
обойти можно через temp таблицу, в которую можно положить clob, а в процедуру отдать id
если бы, штучка гораздо интересней. 9201 при приличном размере уникодного цлоба вываливает ора-600, а если пару функций применить, так весь инстанс в коре сваливается.
9204 поправили нехорошие, но главное никаких секурити алертов нет. молодцы млин.
к стати фича работает только с пхп :) жаба все хавает на ура.
 

oson

Guest
Пимерно я понял-Спасибо. Хотя слэнг как в черном квартале Нью-Йорга.Кого и за что схавала жаба?
Но суть не в том. То есть массив я могу передать в процедуру только как строку.Тогда можно вообще так-
if ($str=="")
{
$str ="DECLARE p_num phparr.t_num;BEGIN ";
};



if (@ $btnPrep)
{
$count += 1;
@ print "<br>count = $count";
$str = $str." p_num(".$count.") := ".$id.';';
print "<h5>20 str=$str</h5>";

};
if (@ $btnOk)
{
$str = $str.' phparr.insarr3( p_num, :v_totl); END;';
print "<h5>26 str=$str</h5>";
};



if (@ $btnSub)
{
$db = "TP9";


$conn = OCILogon("demo","d",$db);
$sth = OCIParse( $conn, $str);


OCIBindByName ( $sth, ":v_totl", $v_totl, 100 );


OCIExecute ( $sth );

OCIFreeStatement($sth);

print "<h2>v_totl=$v_totl</h2>";


};
?>

<form method="POST" action="proc9.php">
ID: <br><input type="text" name="id" value="<%= $id %>"
<input type="text" name="count" value="<%= $count %>"
<input type="text" name="str" value="<%= $str %>" >
<input type="submit" value="PREP" name="btnPrep">
<input type="submit" value="START" name="btnSub">
<input type="submit" value="OK" name="btnOk">
</form>
Но я какбы хочу не строку, а массив передать.
Кстати-а как его сформировать в PHP, если надо шаг за шагом вводить данные из формы и запоминать как очередной элемент массива - чтоб не забыл предыдущее
значение. Использовать cookie?
 
Сверху