Как я могу вызвать эту хранимую процедуру в PHP? - PullRequest
0 голосов
/ 11 сентября 2018

Существует хранимая процедура оракула, которую мне нужно вызвать и получить ее выходную переменную, но я не уверен, как это сделать из PHP.Я также использую фреймворк Laravel.

Вот что у меня есть.

$db = DB::connection('oracle');
$stmt = $db->getPdo()->prepare("EXEC jgreen.person_match(p_first_name => 'Bob'
    , p_last_name => 'Mitchell'
    , p_middle_name => ''
    , p_birth_date => to_date('1982-02-09', 'YYYY-MM-DD')
    , p_gender => null
    , p_email => 'test@gmail.com'
    , p_phone => null
    , p_ssn_last_4 => null
    , p_id_out => ?
    , p_suspend_out => ?
    , p_status_out => ?
    , p_message_out => ?)");
$stmt->bindParam(1, $id);
$stmt->bindParam(2, $suspend);
$stmt->bindParam(3, $status);
$stmt->bindParam(4, $message);

$stmt->execute();

echo $status . ' ' . $message . ' ' . $pidm . ' ' . $suspend;

В настоящее время я получаю

oci_bind_by_name (): ORA-01036: недопустимое имя / номер переменной

но я даже не уверен, что построил запрос с самого начала.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Похоже, вы определяете PHP-выглядящий массив для передачи параметров, но я вполне уверен, что это не подходит для Oracle.Вместо этого вызывайте хранимую процедуру как последовательность параметров, а не массив:

$stmt = $db->getPdo()->prepare("EXEC jgreen.person_match(
  'Bob',
  'Mitchell',
  '',
  to_date('1982-02-09', 'YYYY-MM-DD'),
  null,
  'test@gmail.com',
  null,
  null,
  ?,
  ?,
  ?,
  ?
)");
0 голосов
/ 11 сентября 2018

Попробуйте это

$db = DB::connection('oracle');
$stmt = $db->getPdo()->prepare("EXEC jgreen.person_match(p_first_name => :first_name
    , p_last_name => :last_name
    , p_middle_name => :middle_name
    , p_birth_date => to_date(:birth_date, 'YYYY-MM-DD')
    , p_gender => :gender
    , p_email => :email
    , p_phone => :phone
    , p_ssn_last_4 => :ssn
    , p_id_out => :id_out
    , p_suspend_out => :suspend_out
    , p_status_out => :status_out
    , p_message_out => :message_out)");
$stmt->bindValue(':first_name', 'Bob');
$stmt->bindValue(':last_name', 'Mitchell');
$stmt->bindValue(':middle_name', '');
$stmt->bindValue(':birth_date', '1982-02-09');
$stmt->bindValue(':gender', null);
$stmt->bindValue(':email','test@gmail.com');
$stmt->bindValue(':ssn', null);
$stmt->bindParam(':id_out', $id);
$stmt->bindParam(':suspend_out', $suspend);
$stmt->bindParam(':status_out', $status);
$stmt->bindParam(':message_out', $message);

$stmt->execute();

echo $status . ' ' . $message . ' ' . $pidm . ' ' . $suspend;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...