我收到以下错误: 警告:编译但编译错误
当我尝试创建以下函数时:
Create or replace function Time_Gap (v_date1, v_date2, return varchar2 )
is
difrence_In_Hours varchar2;
difrence_In_minutes varchar2;
difrence_In_seconds varchar2;
begin
difrence_In_Hours := floor(((v_date2-v_date1)*24*60*60)/3600);
difrence_In_minutes := floor((((v_date2-v_date1)*24*60*60) -
floor(((v_date2-v_date1)*24*60*60)/3600)*3600)/60);
difrence_In_seconds := round((((v_date2-v_date1)*24*60*60) -
floor(((v_date2-v_date1)*24*60*60)/3600)*3600 -
(floor((((v_date2-v_date1)*24*60*60) -
floor(((v_date2-v_date1)*24*60*60)/3600)*3600)/60)*60) ));
return difrence_In_Hours || '' HRS '' || difrence_In_minutes || '' MINS '' || difrence_In_seconds
|| '' SECS '';
end ;
/
我做错了什么???
谢谢,
答案 0 :(得分:1)
一些语法错误,返回类型应该在输入参数之外并定义输入类型:
create or replace function time_gap (v_date1 in date, v_date2 in date)
return varchar2 is
difrence_in_hours varchar2(500);
difrence_in_minutes varchar2(500);
difrence_in_seconds varchar2(500);
begin
difrence_in_hours := floor ( ( (v_date2 - v_date1) * 24 * 60 * 60) / 3600);
difrence_in_minutes :=
floor ( ( ( (v_date2 - v_date1) * 24 * 60 * 60) - floor ( ( (v_date2 - v_date1) * 24 * 60 * 60) / 3600) * 3600) / 60);
difrence_in_seconds :=
round (
( ( (v_date2 - v_date1) * 24 * 60 * 60)
- floor ( ( (v_date2 - v_date1) * 24 * 60 * 60) / 3600) * 3600
- ( floor (
( ( (v_date2 - v_date1) * 24 * 60 * 60) - floor ( ( (v_date2 - v_date1) * 24 * 60 * 60) / 3600) * 3600)
/ 60)
* 60)));
return difrence_in_hours || ' HRS ' || difrence_in_minutes || ' MINS ' || difrence_in_seconds || ' SECS';
end;
/
编辑:
您必须向我们提供更多错误消息。它没有说什么。这对我来说很好:
declare
function time_gap (v_date1 in date, v_date2 in date)
return varchar2 is
difrence_in_hours number;
difrence_in_minutes number;
difrence_in_seconds number;
begin
difrence_in_hours := floor ( ( (v_date2 - v_date1) * 24 * 60 * 60) / 3600);
difrence_in_minutes :=
floor ( ( ( (v_date2 - v_date1) * 24 * 60 * 60) - floor ( ( (v_date2 - v_date1) * 24 * 60 * 60) / 3600) * 3600) / 60);
difrence_in_seconds :=
round (
( ( (v_date2 - v_date1) * 24 * 60 * 60)
- floor ( ( (v_date2 - v_date1) * 24 * 60 * 60) / 3600) * 3600
- ( floor (
( ( (v_date2 - v_date1) * 24 * 60 * 60)
- floor ( ( (v_date2 - v_date1) * 24 * 60 * 60) / 3600) * 3600)
/ 60)
* 60)));
return trim (to_char (difrence_in_hours)) || ' HRS ' || trim (to_char (difrence_in_minutes)) || ' MINS ' || trim (
to_char (
difrence_in_seconds)) || ' SECS';
end;
begin
dbms_output.put_line (time_gap (sysdate, sysdate - 2));
end;
==>
PL/SQL block executed
-48 HRS 0 MINS 0 SECS
答案 1 :(得分:0)
您是否在不检查语法的情况下创建了它?在做这样的事情之前,请务必检查语法。
根据https://docs.oracle.com/cd/B12037_01/server.101/b10759/create_function.gif仅在第一行:
那时我停止了阅读。