ORA-02287:此处不允许序号(sequence number not allowed here) 的避免以及强制实现

白天在过程包中使用序列产生的一个错误,记录一下

在select语句中直接使用序列来产生主键id,但是oracle提示此处不允许使用序列。

<span style="font-size:14px;">select SEQ_B_LOG_ID.NEXTVAL id , 'elong_deo' name from dual</span>
解决方法,使用函数取序列值

<span style="font-size:14px;">create or replace function get_seq_next (seq_name in varchar2) return number
is
  seq_val number ;
begin
  execute immediate 'select '|| seq_name|| '.nextval from dual' into seq_val ;
  return seq_val ;
end get_seq_next;</span>
在存储过程中调用取序列函数来替代直接取序列的方法即可。

FUNCTION GET_SEQ_NEXT RETURN NUMBER IS

  SEQ_VAL NUMBER;

BEGIN

  EXECUTE IMMEDIATE 'select GAS_CA.SEQ_A_RCVBL_GAS_FLOW_ID.NEXTVAL@TO_SJQYXLKfrom dual'

    INTO SEQ_VAL;

  RETURN SEQ_VAL;

END GET_SEQ_NEXT;


你可能感兴趣的:(ORA-02287:此处不允许序号(sequence number not allowed here) 的避免以及强制实现)