Этот пример работает для меня:
Reqirements:
Груша MDB2 с поддержкой оракула
В этом примере показано, как запустить пакет Oracle из php с использованием среды MDB2, используя процедуру сохранения с параметрами IN, OUT, IN OUT и вернуть результат через переменные php.
Ссылки:
Php код:
$in = "IN";
$out = "OUT";
$io = "INOUT";
// to show vars after
var_dump("{$in}::{$out}::{$io}");
//
$sql = "BEGIN PKG_TEST.MyProcedure(:iparm, :oparm, :ioparm); END;";
$sth = $mdb2->prepare($sql);
//
$sth->bindParam('iparm', $in, 'text', 20);
$sth->bindParam('oparm', $out, 'text', 20 );
$sth->bindParam('ioparm', $io, 'text', 20);
//
$res = $sth->execute();
//
if (PEAR::isError($res)) {
var_dump($res->userinfo);
}else{
$sth->free();
}
// to show vars before
var_dump("{$in}::{$out}::{$io}");
Определение пакета Oracle
CREATE OR REPLACE PACKAGE PKG_TEST AS
PROCEDURE MyProcedure(P1 IN VARCHAR2, P2 OUT VARCHAR2, P3 IN OUT VARCHAR2);
END PKG_TEST;
CREATE OR REPLACE PACKAGE BODY PKG_TEST IS
PROCEDURE MyProcedure(P1 IN VARCHAR2, P2 OUT VARCHAR2, P3 IN OUT VARCHAR2)
IS
BEGIN
P2 := P1 || '---- OUT ----';
P3 := P1 || '---- IN OUT ----';
END MyProcedure;
END PKG_TEST;
Возвращение снимка экрана:
string(14) "IN::OUT::INOUT"
string(39) "IN::IN---- OUT ----::IN---- IN OUT ----"
Проверено:
- Oracle 10g, 11g
- Linux (сервер Ubuntu, Amazon EC2) и windows xammp 1.7.4
- php 5.3.x