Как использовать последовательность Oracle из функции PHP ODBC - PullRequest
0 голосов
/ 12 октября 2018

При попытке вставить эту проблему генерирует меня.Использование неопределенной константы SEQUENCE_ID_PROBLEMA - предполагается SECUENCIA_ID_PROBLEMA

Я не знаю, где проблема, пожалуйста, помогите.

Моя последовательность Oracle:

<code>
CREATE SEQUENCE INFORMACION.SECUENCIA_ID_PROBLEMA
 START WITH 0
 MAXVALUE 9999999999999999999999999999
 MINVALUE 0
 NOCYCLE
 NOCACHE
 NOORDER;
</code>

Мой код в PHP:

<code>
$sql = "INSERT INTO $tabla (ID_PROBLEMA, HORA_INICIO, PROBLEMA, CAUSA, 
      SOLUCION, HORA_FIN, ID_ASIGNACION) VALUES (?, ?, ?, ?, ?, ?, ?)"; 
$stmt = odbc_prepare($Conex, $sql); 
$success = odbc_execute($stmt,[SECUENCIA_ID_PROBLEMA.nextval,$HORA_INICIO,$PROBLEMA, $CAUSA,SOLUCION,sysdate, $ID_ASIGNACION] );
</code>

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

В конце концов, вы не можете использовать последовательность из php.Я создал триггер в Oracle Data Bae, чтобы он выполнял последовательность при вставке новой строки

<code>
CREATE SEQUENCE INFORMACION.SECUENCIA_ID_PROBLEMA
 START WITH 0
 MAXVALUE 9999999999999999999999999999
 MINVALUE 0
 NOCYCLE
 NOCACHE
 NOORDER; 

CREATE TRIGGER problema_on_insert
 BEFORE INSERT ON PROBLEMA
 FOR EACH ROW
BEGIN
 SELECT SECUENCIA_ID_PROBLEMA.nextval
 INTO :new.ID_PROBLEMA
 FROM dual;
END;
</code>
0 голосов
/ 14 октября 2018

PHP и SQL - это совершенно разные языки, и вы получаете предупреждение PHP, которое выдается интерпретатором PHP:

define('FOO', 3.1416);
echo FOO; // 3.1416
echo BAR; // Warning: Use of undefined constant BAR - assumed 'BAR' (this will throw an Error in a future version of PHP)

Ваш код пытается обработать имя последовательности как динамический ввод.Вы не можете использовать подготовленные заявления для этого, потому что вся цель подготовленных заявлений состоит в том, чтобы предотвратить это.Если вам действительно нужно, вам нужно сгенерировать базовый SQL-скелет с простыми строковыми функциями:

$table = 'PROBLEMA';
$sequence = 'SECUENCIA_ID_PROBLEMA';
$sql = "INSERT INTO $table (ID_PROBLEMA, HORA_INICIO, PROBLEMA, CAUSA, 
      SOLUCION, HORA_FIN, ID_ASIGNACION) VALUES ($sequence.nextval, ?, ?, ?, ?, ?, ?)";
INSERT INTO PROBLEMA (ID_PROBLEMA, HORA_INICIO, PROBLEMA, CAUSA, 
          SOLUCION, HORA_FIN, ID_ASIGNACION) VALUES (SECUENCIA_ID_PROBLEMA.nextval, ?, ?, ?, ?, ?, ?)

Однако ваш код также пытается передать динамически связанную переменную фиксированным жестко закодированным текстом.,Интересно, является ли эта дополнительная сложность намеренной и необходимой.Наличие разных таблиц с одинаковыми точными именами столбцов - потенциальный запах кода:)

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