通过存储过程检索Oracle序列的下一个值

时间:2015-03-10 17:00:24

标签: oracle stored-procedures oracle11g sequence

我在Oracle11g中创建了一个按预期工作的SEQUENCE。挑战在于我需要通过存储过程检索序列的下一个值(因为我使用的应用程序只能调用存储过程而不能调用sql语句。)

我看了一遍,我找到的最近的就是这里(这里:https://community.oracle.com/thread/2216649):

CREATE OR REPLACE PROCEDURE CSDWH.CSDWH_RETURN_SEQ_NUM 
(SEQ_NAME IN VARCHAR2,SEQUENCE_OUT OUT NUMBER) 
IS 
BEGIN   
EXECUTE IMMEDIATE 'SELECT ' || SEQ_NAME || '.NEXTVAL from dual' INTO sequence_out; 
END;

这个问题是执行方式:

declare
  l_val number;
begin
  csdwh_return_seq_num( 'FOO_SEQ', l_val );
  dbms_output.put_line( l_val );
end;

我需要执行存储过程的应用程序只有一个连接字符串别名,一个存储过程名称和一个要指定的返回参数字段。执行此存储过程的方法需要6行代码。

有没有办法用EXECUTE命令实现上述目的?

i.e. EXECUTE CSDWH.CSDWH_RETURN_SEQ_NUM 

会返回值吗?

1 个答案:

答案 0 :(得分:0)

只需创建一个函数而不是过程

CREATE OR REPLACE FUNCTION GET_SEQ(SEQ_NAME IN VAECHAR2) AS
DECLARE
    seq_out NUMBER;
BEGIN
    EXECUTE IMMEDIATE 'SELECT ' || SEQ_NAME || '.NEXTVAL from dual' INTO seq_out;
    RETURN seq_out;
END;

然后您可以使用select get_seq('foo_seq') from dual