Sql Developer中的表值函数

时间:2019-04-02 04:04:34

标签: oracle plsql oracle-sqldeveloper

我已经在Sql Server 2012中创建了一个表值函数,可以正常工作 但是当我在相同的表上但使用Oracle Sql开发人员应用相同的代码时 它显示语法错误

SQL Server中的功能

Create Function fx_Mfr

(
@Mfr varchar
)

returns table

as

Return

Select * from Manufacturer

where Mfr = @Mfr

2 个答案:

答案 0 :(得分:1)

一个选项是返回ref游标,例如在本示例中(它类似于模拟MS SQL Server中的内容):

SQL> create or replace function fx (par_deptno in number)
  2    return sys_refcursor
  3  is
  4    rc sys_refcursor;
  5  begin
  6    open rc for
  7      select deptno, ename, job, sal
  8      from emp
  9      where deptno = par_deptno;
 10    return rc;
 11  end;
 12  /

Function created.

SQL> select fx(10) from dual;

FX(10)
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        10 CLARK      MANAGER         2450
        10 KING       PRESIDENT      10000
        10 MILLER     CLERK           1300


SQL>

答案 1 :(得分:0)

或者使用隐式语句结果-如果您使用的是Oracle 12c或更高版本的数据库。添加此功能是为了使从SQL Server迁移代码更加容易。

CREATE OR REPLACE PROCEDURE fx (par_deptno IN NUMBER)
AS
  l_cursor_1 SYS_REFCURSOR;
BEGIN
      OPEN l_cursor_1 FOR
      SELECT department_id, first_name, last_name, job_id, salary 
      FROM   employees
      WHERE  department_id = par_deptno;

    DBMS_SQL.RETURN_RESULT(l_cursor_1);
END;
/

然后执行程序

DECLARE
  PAR_DEPTNO NUMBER;
BEGIN
  PAR_DEPTNO := 100;

  FX(
    PAR_DEPTNO => PAR_DEPTNO
  );
END;

输出是从数据库自动神奇地返回的:

enter image description here

Examples/docs on Oracle-Base