如何从oracle合并查询返回主键

Sen*_*cob 8 oracle merge sequence oracle10g sql-returning

我想从oracle合并查询中返回主键.我正在使用单个语句插入,如果不存在,我不想使用过程或函数来这样做..

这是示例查询

merge into myTable e
  using (select :empname name from dual) s
  on (UPPER(TRIM(e.empname)) = UPPER(TRIM(s.name)))
  when not matched then insert (empname) 
    values (s.name)
Run Code Online (Sandbox Code Playgroud)

我需要获得myTable的另一个主键字段.使用序列和触发器插入主键

我尝试添加, RETURNING empID into :empId 但它给出了错误

Gol*_*rol 10

有一个问题.

  1. Merge Into不支持Returning Into,所以不起作用.
  2. 不会始终使用序列,因为它仅在插入新记录时使用.
  3. 获取序列的现有值将不起作用,因为如果要在当前会话中尚未使用序列时查询Sequence.currval,则会出现错误.

解决它:

  1. 使用过程或匿名程序块尝试更新值.如果sql%rowcount在更新后返回0,则执行插入.
  2. 使用选择(查询UPPER(TRIM(name)))查找已更新的记录.