Повторное использование анонимного параметра в подготовленном утверждении - PullRequest
1 голос
/ 28 мая 2010

Я настраиваю SQL вставки, сгенерированный hibernate, и столкнулся с проблемой. Когда Hibernate генерирует запрос сам по себе, он вставляет данные в первые два столбца таблицы, но это вызывает ошибку базы данных, поскольку все четыре столбца таблицы не обнуляются. Чтобы вставка выполнялась правильно, она должна вставить те же данные в два столбца новой записи. Это означает, что мне нужен Hibernate для привязки одних и тех же данных к двум различным параметрам в запросе (подготовленном операторе), который я пишу.

Существует ли какой-либо синтаксис SQL, позволяющий мне ссылаться на анонимные параметры, связанные с подготовленным оператором, в порядке, отличном от того, с которым они связаны?

Детали

REF_USER_PAGE_XREF
----------------------------------------
PK FK1 | NETWORK_ID     | VARCHAR2(100)
PK FK1 | PAGE_PATH      | VARCHAR2(1000)
       | USER_LAST_UPDT | VARCHAR2(100)
       | TMSP_LAST_UPDT | DATE

insert into 
    REF_USER_PAGE_XREF(
        NETWORK_ID, 
        PAGE_PATH, 
        TMSP_LAST_UPDT, 
        USER_LAST_UPDT) 
values (
    ?, /* want to insert the same data here */
    ?, 
    ?, /* and here */
    (select 
        to_char(sysdate, 'DD-MON-YY') 
    from 
        dual)

Я хочу вставить те же данные в первый и третий анонимные параметры.

Окончательный ответ (на основе ответа @mdma)

insert into 
    REF_USER_PAGE_XREF(
        NETWORK_ID, 
        PAGE_PATH, 
        USER_LAST_UPDT, 
        TMSP_LAST_UPDT) 
select 
    Param1, 
    Param2, 
    Param1, 
    (select 
        to_char(sysdate, 'DD-MON-YY') 
    from 
        dual) 
from 
    (select 
        ? as Param1, 
        ? as Param2
    from 
        dual) params

1 Ответ

1 голос
/ 28 мая 2010

Вы можете написать

INSERT INTO REF_USER_ROLE_XRE
  SELECT Param1, Param2, Param1, 
    (select to_char(sysdate, 'DD-MON-YY') from  dual)
FROM 
    (SELECT ? AS Param1, ? AS Param2) params
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...