【发布时间】:2014-11-29 02:43:34
【问题描述】:
我想为以下模式编写一个 PL/SQL 函数:
Parts (pid:integer, pname:string, year:integer, price:integer)
Suppliers (sid:integer, sname: string, state:string, zipcode:string)
Orders (pid:integer, sid:integer, quantity:integer)
函数必须这样做:
PL/SQL 函数将价格作为参数并返回与给定价格第三近的部分的 pid。请注意,最近的可以更高或更低。如果有多个部分具有该属性,请选择具有较高年份的部分。如果仍有平局,请选择 pid 最高的那个。
到目前为止我已经这样做了,但是我不知道如何检测平局情况并进行处理:
CREATE OR REPLACE FUNCTION getThirdNearestPriceOfPart(price IN INTEGER)
RETURN Parts.pid%type
IS
third_pid Parts.pid%type;
BEGIN
SELECT P1.pid INTO third_pid
FROM Parts P1
WHERE (2) = (
SELECT COUNT(*) FROM Parts P2
WHERE P2.price > P1.price OR P2.price < P1.price);
RETURN third_pid;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN -1;
END;
请帮帮我
【问题讨论】:
-
这听起来很像家庭作业问题。您应该编辑您的问题并添加您尝试过的任何尝试。