Поместите результат курсора блока PL / SQL в переменную php - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно поместить результат курсора запроса в переменную PHP.Результатом выбора является число, которое мне нужно использовать позже.Есть какой-либо способ сделать это?(Я использую оракул 11g)

$query2 = "DECLARE
CURSOR cursore IS
SELECT example FROM etable FOR UPDATE of example;
BEGIN
  OPEN cursore;
FETCH cursore INTO v_consulta;
UPDATE etable SET example = example + 1;
COMMIT;
  CLOSE cursore;
END;";

В этом запросе мне нужно выбрать столбец, получить его значение и поместить его в переменную PHP.И затем мне нужно заблокировать его, чтобы предотвратить одновременное получение одинаковыми значениями перед обновлением.Это был лучший способ, который я нашел.Но я не могу взять результат выбора.


Ниже приведен весь код с FETCH и oci_bind_by_name

<?php

    include "config.php";    
    $query2 = "DECLARE
    CURSOR cursore IS
    SELECT example FROM etable FOR UPDATE of example;
    BEGIN
      OPEN cursore;
    FETCH cursore INTO v_consulta;
    UPDATE etable SET example = example + 1;
    COMMIT;
      CLOSE cursore;
    END;";

    $s2 = oci_parse($c, $query2);
    if (!$s2) {
        $m2 = oci_error($c);
        trigger_error('Could not parse statement: ' . $m['message'], E_USER_ERROR);
    } //prepara para a execução

    $r2 = oci_execute($s2);
    if (!$r2){
        $m2 = oci_error($s2);
        trigger_error('Could not execute statement: ' . $m['message'], E_USER_ERROR);
    }// executa a consulta

while (oci_fetch($s2)) {
    echo oci_result($s2, 'v_consulta');
}

?>

Мне нужно взять значениеFETCH и поместите ir в переменную PHP.Возможно ли это?
Может быть, есть другой способ сделать запрос.(Я использую оракул 11g).

Я получаю эту ошибку:

Warning: oci_fetch(): ORA-24374: define not done before fetch or execute and fetch in C:\xampp\htdocs\ProjectO\numorca.php on line 30

строка 30:

while (oci_fetch($s2)) {
    echo oci_result($s2, 'v_consulta');
}

Кто-нибудь может помочьс этим запросом?Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2019

Мне нужно выбрать столбец, получить его значение и поместить его в переменную php

. В posgresql вы можете 'UPDATE [...] RETURNING [...]'и избегайте курсора:

pg_query($dbconn, 'BEGIN TRANSACTION;');

pg_send_query($dbconn,'UPDATE etable SET example = example + 1 RETURNING example;');
$res = pg_get_result($dbconn);
$array = pg_fetch_assoc($res);
echo 'example=' . $array['example'] . "\n";
pg_query($dbconn, 'COMMIT;');

Между «BEGIN TRANSACTION» и «COMMIT» никто не может выбрать / обновить / удалить etable, так что это может быть горлышко бутылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...