Oracle函数从带有union的select返回值

Oracle函数从带有union的select返回值,oracle,Oracle,我试图将此函数添加到oracle db中,但它不断抛出以下错误: 10/72 PLS-00049:坏绑定变量“COMMITID” 12/90 PLS-00049:坏绑定变量“COMMITID” 14/76 PLS-00049:坏绑定变量“COMMITID” 17/16 PL/SQL:ORA-00933:SQL命令未正确结束 内部select语句工作正常,但当我试图在函数中实现它时,我无法让它接受它。我甚至尝试删除select语句中的参数绑定作为起始位置,但它会引发不同的错误。函数中不需要绑定变量

我试图将此函数添加到oracle db中,但它不断抛出以下错误:

10/72 PLS-00049:坏绑定变量“COMMITID”

12/90 PLS-00049:坏绑定变量“COMMITID”

14/76 PLS-00049:坏绑定变量“COMMITID”

17/16 PL/SQL:ORA-00933:SQL命令未正确结束


内部select语句工作正常,但当我试图在函数中实现它时,我无法让它接受它。我甚至尝试删除select语句中的参数绑定作为起始位置,但它会引发不同的错误。

函数中不需要绑定变量;您正在函数的SQL部分使用函数参数,因此可以简单地通过其名称来引用它。 例如:

SQL> create or replace function f1(p IN number) return number is
  2      retVal number;
  3  begin
  4      select :p * 2 into retVal from dual;
  5      return retVal;
  6  end;
  7  /

Warning: Function created with compilation errors.

SQL> sho err
Errors for FUNCTION F1:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/12     PLS-00049: bad bind variable 'P'
正确的方法:

SQL> create or replace function f1(p IN number) return number is
  2      retVal number;
  3  begin
  4      select f1.p * 2 into retVal from dual;
  5      return retVal;
  6  end;
  7  /

Function created.

SQL> select f1(3) from dual;

     F1(3)
----------
         6

为了避免潜在的问题,我建议指定别名,即
选择f1.p*2从dual返回
SQL> create or replace function f1(p IN number) return number is
  2      retVal number;
  3  begin
  4      select f1.p * 2 into retVal from dual;
  5      return retVal;
  6  end;
  7  /

Function created.

SQL> select f1(3) from dual;

     F1(3)
----------
         6