获取由oracle PL/SQL中的偏移量定义的下一行

获取由oracle PL/SQL中的偏移量定义的下一行,oracle,plsql,Oracle,Plsql,我有一个接受整数参数的函数。我需要返回下一行,第二行, 当前行的上一个。例如,1表示下一行,-1表示上一行,2表示下一行 当前等的第二行 换句话说,函数必须首先将值存储到变量中,该变量表示下一行、上一行或同一行。这将由函数期望的偏移参数定义。下面的代码仅将偏移值与当前行值相加或相减 该函数还使用来自包接口的全局变量,以精确定位需要偏移的行 function my_function (v_offset integer) return number is var

我有一个接受整数参数的函数。我需要返回下一行,第二行, 当前行的上一个。例如,1表示下一行,-1表示上一行,2表示下一行 当前等的第二行

换句话说,函数必须首先将值存储到变量中,该变量表示下一行、上一行或同一行。这将由函数期望的偏移参数定义。下面的代码仅将偏移值与当前行值相加或相减

该函数还使用来自包接口的全局变量,以精确定位需要偏移的行

    function my_function (v_offset integer) 
    return number 
    is

    var flight.flightID%TYPE;

    BEGIN
    if v_offset>0 then
     select something
     INTO var
     from somewhere
     where id = v_global + v_offset; 
    else 
     select something
     INTO var
     from somewhere
     where id = v_global-givennr; 
     end if;
    RETURN var;

  end my_function;
  /

这是我到目前为止的代码。

滞后和超前分析功能。LAGcolumn_name,由xxx补偿超额订单。 我假设您的表是按列id排序的

LAG-从上一行返回值。 LEAD-从下一行返回值

create table somewhere(id number, something varchar2(20));

-- populate table with data.
    insert into somewhere
select level, chr(64+ level) from dual 
connect by level < 25;

 declare 
   v_global number :=10; 
   p_offset number :=-5;
   v_resutl varchar2(20);
 begin

  select val into v_resutl from (
  select id, case when  p_offset >0 then lead(something,abs(p_offset)) over(order by id) 
                  when  p_offset<0 then lag(something,abs(p_offset)) over(order by id) 
                  when  p_offset =0 then something  end val
  from somewhere) where id = v_global;

 dbms_output.put_line(v_resutl);
 end;

是的,只有一个参数。它是在全局变量中定义的,因为它在一个包中。我刚刚上载了它…您发布的代码有什么问题?我想显示下一行,而不是偏移的行。例如,如果参数为1。它将被添加到id中。但是这张桌子乱七八糟。