首页 > 解决方案 > PL/SQL 查询列并在函数调用中使用

问题描述

我正在尝试这个,但肯定我错过了很多

declare 
  my_id table.ISR_ID%type; 
begin
  select NVL(MAX(table.ISR_ID)+1,1) into isr_id
    from table; 

  select my_pkg.getFunction(InputToFunction=> isr_id);  -- from ?
end;

标签: plsql

解决方案


如果您声明了 MY_ID 变量,则应该选择它,而不是选择 ISR_ID(从未声明过)。

此外,您应该将函数的结果返回到某些东西(可能是另一个变量?)。我已将其声明为 FUN_RES - 请参阅 PL/SQL 匿名块中的注释。

说你错过了很多并没有多大帮助。你应该指定你得到哪些错误。无论如何:尝试这样的代码,说明它是否有效,如果没有,请说明原因(可能的错误等)。

declare 
  my_id   table.ISR_ID%type; 
  fun_res number;       --> function result should be returned into this variable.
                        --  I don't know what it returns, so I set it to be a NUMBER.
                        --  Change it, if necessary.
begin  
  select NVL(MAX(table.ISR_ID) + 1, 1) 
    into my_id 
    from table; 

  fun_res := my_pkg.getFunction(my_id);  
end;

[编辑]

如果您必须为表中的每个 ISR_ID 选择函数的值,那么您不需要 PL/SQL 但

select isr_id, 
       my_pkg.getfunction(isr_id) fun_res
from table;

如果您想要 PL/SQL,则在循环中执行,例如:

begin
  for cur_r in (select isr_id from table) loop
    dbms_output.put_line(cur_r.isr_id ||', result = ' || my_pkg.getfunction(cur_r.isr_id));
  end loop;
end;
/

推荐阅读