我已经在Sql Server 2012中创建了一个表值函数,可以正常工作 但是当我在相同的表上但使用Oracle Sql开发人员应用相同的代码时 它显示语法错误
SQL Server中的功能
Create Function fx_Mfr
(
@Mfr varchar
)
returns table
as
Return
Select * from Manufacturer
where Mfr = @Mfr
答案 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;
输出是从数据库自动神奇地返回的: