ストアドファンクションから配列を返す
Do You PHP?でやったネタですが、何かふとしたことからdbms_sqlパッケージのXXXX_tableを使って簡単にできそうな気がして、実際に試してみたのでメモ。
毎度の事ながら、環境は次の通り。
- PHP5.2.0
- Oracle 10g XE 10.2.0.1.0
<?php /** * ストアドは別途SQL*Plusとかから作成する * * CREATE OR REPLACE FUNCTION getUsers( * nm IN VARCHAR2 := '' * ) RETURN dbms_sql.varchar2_table * IS * ret dbms_sql.varchar2_table; * BEGIN * SELECT ename * BULK COLLECT INTO ret * FROM emp * WHERE ename LIKE nm||'%'; * * RETURN ret; * END; * / * SHOW ERRORS */ $nm = ''; $db = oci_connect("scott", "tiger", "//localhost/XE"); $stmt = oci_parse($db, "BEGIN :ret := getUsers(:nm); END; "); oci_bind_array_by_name($stmt, ":ret", $ret, 100, 20, SQLT_CHR); oci_bind_by_name($stmt, ':nm', $nm, -1); oci_execute($stmt); var_dump($ret);
何だろ。。。楽すぎ。。。:-D