一尘不染

在准备好的语句中重用匿名参数

hibernate

我正在自定义由hibernate生成的插入SQL,并遇到了问题。当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

阅读 213

收藏
2020-06-20

共1个答案

一尘不染

你可以写

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
2020-06-20