これは浮気けど...代わりのビューを定義することができますサブクエリを使用している:
を
CREATE VIEW sal_ordered_emps AS
SELECT *
FROM emp
ORDER BY sal DESC;
次に、あなたが行うことができます。また
SELECT * FROM sal_ordered_emps WHERE ROWNUM < 3;
を、あなたはこれが私の意見では、実際に哀れな方法である
CREATE OR REPLACE PACKAGE emp_pkg
AS
TYPE emp_table IS TABLE OF EMP%ROWTYPE;
FUNCTION get_max_sals(
n INT
) RETURN emp_table PIPELINED;
END;
/
CREATE OR REPLACE PACKAGE BODY emp_pkg
AS
FUNCTION get_max_sals(
n INT
) RETURN emp_table PIPELINED
AS
cur SYS_REFCURSOR;
in_rec EMP%ROWTYPE;
i INT := 0;
BEGIN
OPEN cur FOR SELECT * FROM EMP ORDER BY SAL DESC;
LOOP
i := i + 1;
FETCH cur INTO in_rec;
EXIT WHEN cur%NOTFOUND OR i > n;
PIPE ROW(in_rec);
END LOOP;
CLOSE cur;
RETURN;
END;
END;
/
SELECT *
FROM TABLE(emp_pkg.get_max_sals(2));
出典
2016-03-29 21:50:03
MT0
技術的には、「サブクエリ」ではなく派生テーブルです。どのOracleのバージョンを使用していますか? Oracle 12では、ANSI SQLの '最初の3行のみを取得'を使用できます –
インラインビューを使用しています。 where句でクエリを実行すると、サブクエリになります。 – Avani
はい、わかっていますが、派生テーブルを使用することはできません(申し訳ありませんが、申し訳ありません)。私はOracleを使用しています –