我有一个表Iss_rec
,其中包含以下字段:
Iss_No
Iss_date
Mem_No
Book_No
Fine
我需要使用用户定义的函数打印具有最大罚款的记录。 如果它只是一个记录我可以轻松打印,但对于多行我不知道该怎么做。在线搜索向我展示了人们使用游标的结果,但我想单独使用函数来实现。
让我们说数据是:
165 12-Apr-14 15677 978453 50
166 18-Jun-14 15678 978454 50
167 29-Sep-14 15679 978455 25
168 1-Oct-14 15677 978456 0
169 6-Nov-14 15676 978457 0
现在我想要打印前两个记录,因为它们使用用户定义的函数具有最大值。
这样的东西?
create or replace function maxf
return number is
total number;
begin
select r.mem_no into total from iss_rec r group by r.mem_no having
r.fine=max(r.fine); return total;
end;
/
答案 0 :(得分:0)
如果您只想选择具有最高罚款的行,您可以使用:
SELECT *
FROM Iss_rec
WHERE Fine IN (SELECT MAX(Fine) FROM Iss_rec);
答案 1 :(得分:0)
我需要使用用户打印具有最大罚款的记录 定义的功能。
您可以使用sys_refcursor
打印值:
表:
CREATE TABLE FINE
(
COL1 NUMBER,
COL2 DATE,
COL3 NUMBER,
COL4 NUMBER,
COL5 NUMBER
)
功能:
CREATE OR REPLACE FUNCTION maxf
RETURN sys_refcursor
IS
total sys_refcursor;
BEGIN
Open total for
SELECT *
FROM fine
WHERE col5 IN (SELECT MAX(col5) FROM fine);
RETURN total;
END;
/
执行
DECLARE
var fine%ROWTYPE;
x SYS_REFCURSOR;
BEGIN
x := maxf ();
LOOP
FETCH x INTO var;
DBMS_OUTPUT.put_line (
var.col1 ||' '|| var.col2 ||' '|| var.col3 || ' '|| var.col4 ||' '|| var.col5);
EXIT WHEN x%NOTFOUND;
END LOOP;
END;
输出:
SQL> /
165 12-APR-14 15677 978453 50
166 18-JUN-14 15678 978454 50
PL/SQL procedure successfully completed.
OR
SQL> Select maxf from dual;
MAXF
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
COL1 COL2 COL3 COL4 COL5
---------- --------- ---------- ---------- ----------
165 12-APR-14 15677 978453 50
166 18-JUN-14 15678 978454 50