白天在过程包中使用序列产生的一个错误,记录一下
在select语句中直接使用序列来产生主键id,但是oracle提示此处不允许使用序列。
select SEQ_B_LOG_ID.NEXTVAL id , name from dual
解决方法,使用函数取序列值
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;
在存储过程中调用取序列函数来替代直接取序列的方法即可。
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;