Табличная функция в Sql-разработчике - PullRequest
1 голос
/ 02 апреля 2019

Я создал табличную функцию в Sql server 2012, которая работает нормально, но когда я применил тот же код к той же таблице, но с разработчиком Oracle Sql, он показывает синтаксическую ошибку

Функция в SQL Server

Create Function fx_Mfr

(
@Mfr varchar
)

returns table

as

Return

Select * from Manufacturer

where Mfr = @Mfr

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Один из вариантов - вернуть курсор 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>
0 голосов
/ 02 апреля 2019

Или используя неявные результаты операторов - если вы используете 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

Примеры / документы по Oracle-Base

...