Получение: Предупреждение: oci_fetch (): ORA-24374: определить, что не было выполнено до выборки или выполнения и выборки. несмотря на то, что определили имена

1

После прочтения каждого руководства я мог найти, что до сих пор не могу прийти к решению этой проблемы.

У меня есть следующий код:

<?php

$token = 'number';
$secret = 'number';
$ID;

$conn = oci_connect('FITBIT', 'pass', '127.0.0.1/xe');
$stid = oci_parse($conn, 'BEGIN find_personsdevice_id(:token, :secret, :l_personsdeviceid); END;');
oci_bind_by_name($stid, ':token', $token);
oci_bind_by_name($stid, ':secret', $secret);
oci_bind_by_name($stid, ':l_personsdeviceid', $ID);

oci_define_by_name($stid, 'l_personsdeviceid', $ID);
oci_define_by_name($stid, ':token,', $token);
oci_define_by_name($stid, ':secret,', $secret);

oci_execute($stid);
oci_fetch($stid);
var_dump($stid);

?>

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

Предупреждение: oci_fetch(): ORA-24374: определение не выполняется до извлечения или выполнения и выборки в

Я googled код ora и нашел это:

Причина. Приложение не определяло выходные переменные для данных, которые извлекались перед выдачей вызова выборки или вызова выборки, указав ненулевое количество строк в вызове выполнения. Действие: Проблема OCI определяет вызовы для столбцов, которые будут выбраны.

насколько я могу судить, я добавляю команду oci_fetch после команд define. Так что я делаю неправильно?

процедура PL/SQL:

create or replace
procedure find_personsdevice_id(b_token in varchar2, b_secret in varchar2, l_personsdeviceid out number) as

/*author Ruben Jonkers
  project: FITBIT
  goal procedure: find ID by token and seccret
  date: 20-05-2015
  version:0.1
  adjustments:
*/


cursor c_personsdeviceid (b_token in varchar2:='', b_secret in varchar2:='') is
  select pde.id 
  from personsdevices pde,
       persons psn,
       groups grp,
       tokens tns
  where psn.id=pde.persons_id
  and pde.persons_id = psn.id
  and grp.tokens_id = tns.id
  and tns.token = b_token
  and tns.secret = b_secret;

  r_personsdeviceid c_personsdeviceid%rowtype;

begin
  open c_personsdeviceid (b_token, 
                          b_secret);
  fetch c_personsdeviceid into r_personsdeviceid;
    if c_personsdeviceid%found then
      l_personsdeviceid:=r_personsdeviceid.id;
    end if;
  close c_personsdeviceid;

end;
  • 1
    Это все выходные параметры? В качестве первого шага я бы попробовал oci_define_by_name вызовы oci_define_by_name и посмотреть, что это для вас делает. Я также не думаю, что вам нужен вызов oci_fetch поскольку вы не извлекаете данные из курсора. ???
  • 0
    Я добавил процедуру, чтобы прояснить ситуацию :), может быть, мне нужно что-то еще, кроме получения. Я могу попытаться отобразить $ id?
Показать ещё 1 комментарий
Теги:
database
oci

1 ответ

0
Лучший ответ

Оказалось, что мне совсем не нужно oci_fetch, так как результат уже был сохранен в $ id!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню