Archive for the 'работа' Category


28
Aug

Итак, ситуёвина:
в классе ora есть функция

function addBindByName($key, $val)
{
if (':' != substr($key,0,1)) {
$key = ':'.$key;
}
echo $key.' => '.$val;
$this->bind[$key] = $val;
}

на странице, после инклуда файла этого класса вызываю

$this->ora->addBindByName(":test1", $test1);
$this->ora->addBindByName(":test2", $test2);
$this->ora->addBindByName(":test3", $test3);
$this->ora->addBindByName(":test4", $test4);

Есть также в том же классе функция ociexeb, в которой часть, отвечающая за бинды выглядит так:

if (!empty($this->bind)) {
foreach ($this->bind as $key=>$val) {
if (!oci_bind_by_name($this->res, $key, $val, 4000)) {
return false;

Ну и далее - OCIExecute.

Результат - следующий:
во все поля записывается значение последней переменной из блока addBindByName (в данном случае - значение переменной $test4).
Что сделано неверно?

Powered by ScribeFire.

14
Aug
oracle, php and работа.  | 

По долгу службы появилось пару вопросов. Может знает кто.

Первый: как оракловским sql’ем вызывается транзакция?

Пробовал

START TRANSACTION; ... COMMIT WORK;
BEGIN TRANSACTION; ... COMMIT WORK;
BEGIN; ... COMMIT WORK;

И прочее. Где я не прав?

Второй: инструментом Toad for Oracle созданы сиквенсы для двух таблиц. Когда вызываю их из кода

SELECT SEQ_ONE.CURRVAL||SEQ_TWO.NEXTVAL FROM DUAL

возвращается ошибка
Error: 8002 ORA-08002: sequence SEQ_ONE.CURRVAL is not yet defined in this session

Где я неправ?

UPD2: Сорри, тоже разобрался. Без предварительного вызова SEQ_ONE.NEXTVAL, SEQ_ONE.CURRVAL никаких положительных результатов не даёт :)
Третий: по тому самому селекту в сиквенсе добываю следующее значение последовательности функцией @OCIFetchStatement() (PHP). Насколько говорит документация, функция, цитирую, “Выбирает все строки из результата запроса в массив”. Соответственно, объединяю массив в строку функцией implode() (так как в результате в массиве должно появиться только одно значение, следующее значение последовательности).

Возвращаю строку echo‘й. В документ пишется Array.

Где я дурак?

UPD1: решил, методом @OCIFetchStatement(OCI_NUM)

Буду ужасно благодарен.



Мальчикам и девочкам:


Любителям почитать:

Твиттерянам:


Остальным:

Более того: