Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程函数_Sql_Oracle_Plsql_Oracle11g - Fatal编程技术网

Sql 存储过程函数

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

我有两张桌子 设备(设备ID、设备名称、设备状态、最大持续天数)设备ID 设备租用(设备ID、pickupdate、dropoffdate、客户号) 我需要创建一个存储函数,将clientNo作为输入,如果设备租用表的dropoffdate pickupdate>MaxRentDurationdays,则每天加起来20美元

我在oracle 11g中执行此操作时出错

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,再减去另一个日期的结果
  • 你似乎认为只有一个设备租用你正在处理,但一个用户不能有几个租用

您不想根据从归还日期到当前日期的天数来计算每天20美元吗?存储的函数,该函数接受客户ID作为输入,并根据设备的总租金天数和最大允许租金期限之间的差异返回总罚款。如果函数在不同日期执行,则应为特定客户端生成不同的罚款值。这是我对数据比较困惑的任务。请帮助我。您得到的错误是什么?错误(4,2):PLS-00103:在预期以下情况之一时遇到符号“”:开始函数pragma过程子类型当前光标删除存在之前的外部语言符号“”被忽略。您的代码中存在一些问题。例如,如果设备租用.dropoffdate应该做什么?只有在变量
设备租用
带有字段
dropoffdate
时,此方法才有效,但不能以这种方式访问表。我建议您从一些教程或简单示例开始,了解如何从表中获取值,并对其值进行一些逻辑处理。