Sql 存储过程函数
我有两张桌子 设备(设备ID、设备名称、设备状态、最大持续天数)设备ID 设备租用(设备ID、pickupdate、dropoffdate、客户号) 我需要创建一个存储函数,将clientNo作为输入,如果设备租用表的dropoffdate pickupdate>MaxRentDurationdays,则每天加起来20美元 我在oracle 11g中执行此操作时出错Sql 存储过程函数,sql,oracle,plsql,oracle11g,Sql,Oracle,Plsql,Oracle11g,我有两张桌子 设备(设备ID、设备名称、设备状态、最大持续天数)设备ID 设备租用(设备ID、pickupdate、dropoffdate、客户号) 我需要创建一个存储函数,将clientNo作为输入,如果设备租用表的dropoffdate pickupdate>MaxRentDurationdays,则每天加起来20美元 我在oracle 11g中执行此操作时出错 CREATE OR REPLACE FUNCTION Fines (P_ClientNo Equipment_Hire.Clien
CREATE OR REPLACE FUNCTION Fines
(P_ClientNo Equipment_Hire.ClientNo%TYPE)
RETURN VARCHAR2 IS
V_ClientNo INTEGER;
V_DURATIONDEFD INTEGER;
V_TOTALFINE INTEGER;
BEGIN SELECT ClientNo, MAXDURATIONDAYS
INTO V_FName, V_LName, V_TotalSalary
FROM Equipment, Equipment_hire
WHERE P_CLientNo = Equipment_Hire.ClientNo;
IF Equipment_hire.dropoffdate-equipment_hire.pickupdate >
equipment.maxdurationdays THEN
Equipment_hire.dropoffdate-equipment_hire.pickupdate*20
RETURN Equipment_hire.dropoffdate-equipment_hire.pickupdate*20; ELSE
RETURN 'Date UNSPECIFIED';
END IF; END Fines;
数据:
您只能使用两台设备,请租用设备 格式化代码有助于:
CREATE OR REPLACE FUNCTION Fines(P_ClientNo Equipment_Hire.ClientNo%TYPE)
RETURN VARCHAR2 IS
V_ClientNo INTEGER;
V_DURATIONDEFD INTEGER;
V_TOTALFINE INTEGER;
BEGIN
SELECT ClientNo, MAXDURATIONDAYS
INTO V_FName, V_LName, V_TotalSalary
FROM Equipment, Equipment_hire
WHERE P_CLientNo = Equipment_Hire.ClientNo;
IF Equipment_hire.dropoffdate - equipment_hire.pickupdate > equipment.maxdurationdays THEN
Equipment_hire.dropoffdate - equipment_hire.pickupdate * 20
RETURN Equipment_hire.dropoffdate - equipment_hire.pickupdate * 20;
ELSE
RETURN 'Date UNSPECIFIED';
END IF;
END Fines;
快速浏览:
- 选择两列,但INTO子句包含三个变量
- 你在交叉连接桌子。谁告诉过你使用这个过时的连接语法
- 交叉连接会导致多个结果行,您无法将其读入简单变量
- IF之后的第一行应该做什么
- 您正在查询外部使用表名和列
- 乘法优先于减法(或者应该优先于减法)。所以你选择了一个日期,乘以20,再减去另一个日期的结果
- 你似乎认为只有一个设备租用你正在处理,但一个用户不能有几个租用
设备租用
带有字段dropoffdate
时,此方法才有效,但不能以这种方式访问表。我建议您从一些教程或简单示例开始,了解如何从表中获取值,并对其值进行一些逻辑处理。