ストアドファンクションから配列を返す
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