我在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
会返回值吗?
答案 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