Для ORA-01722 ваш sprintf
имеет одинарные кавычки вокруг %s
, поэтому он попытается вставить строку "seq_name.nextVal"
в числовое поле вместо значения из последовательности;эта строка не может быть преобразована в число, следовательно, ошибка.Вы можете удалить одинарные кавычки:
sprintf("INSERT INTO Custodian_New (Loginid, Type, Id, User, TimeCreated, RcNumber) values (%s, 1, %d, '%s', %d, '%s')", "seq_name.nextVal", $dd, $Name, time(), $rc_num);
Или просто встроить последовательность напрямую, так как кажется, что нет никакого смысла в ее динамическом построении:
sprintf("INSERT INTO Custodian_New (Loginid, Type, Id, User, TimeCreated, RcNumber) values (seq_name.nextVal, 1, %d, '%s', %d, '%s')", $dd, $Name, time(), $rc_num);
Или даже лучше, используйтесвязывать переменные и устанавливать их на $dd
и т. д. Я бы также использовал sysdate
вместо передачи time()
, но не знаю, действительно ли это имеет какое-то значение.