美好的一天。我有一个功能:

create function get_n(search tt.pp%type)
  return number
  is rc number;
begin
  select count(*)
  into rc
  from tt
  where tt.pp=search;

  return (rc);
end;
/

我可以得到结果
variable qwe number;

begin
  select get_n('sample')
    into :qwe
    from dual;
end;

print qwe;

因此,它可以成功运行。但是有一部分:在执行其他命令时,我无法执行print行(PLS-00103:遇到符号“PRINT” ...)。这真的很奇怪。

我尝试从匿名块中的函数获取结果并将其打印出来:
declare
  qwe number;
begin
  select get_n('sample')
    into :qwe
    from dual;
  dbms_output.put_line(qwe);
exception
  when others
    then dbms_output.put_line(sqlerrm);
end;
/

而且它什么也不打印。为什么?

最佳答案

问题是:。以下代码应该工作:

declare
  qwe number;
begin
  select get_n('sample')
    into qwe
    from dual;
  dbms_output.put_line(qwe);
exception
  when others
    then dbms_output.put_line(sqlerrm);
end;
/
:表示需要绑定的变量不是PL / SQL块中的变量。
并且在第一个块的情况下,您在PL / SQL块之后缺少/,这是什么原因导致编译器将print读取为PL / SQL而不是SQLplus脚本的一部分:
variable qwe number;

begin
  select get_n('sample')
    into :qwe
    from dual;
end;
/

print qwe;

10-06 01:47