在Oracle中的功能,以获得显示消息的时间:)

时间:2012-03-22 13:13:55

标签: sql oracle-sqldeveloper

嘿,我试了很多次但我无法修复这个简单的程序来为我的个人网站工作。我想提取当前时间并用它显示一条消息。

赞当前时间是:上午12:00

这是我的代码。

Create Function A1SF_GETTIME Is

    Temptime Char(20);   
    Message  Varchar2(20) := 'The Current Time is :';
    Begin
    Select to_char(sysdate, 'HH24:MI:SS') As "Current Time"   
    Into   TempTime   
    From dual;
    dbms_output.put_line(Message || ' ' || TempTime);      
End;

4 个答案:

答案 0 :(得分:2)

函数需要在函数定义中包含RETURN子句。它必须有一个RETURN语句,以便函数实际返回一些东西。如果你解决这个问题,以及其他人指出你的本地变量Message太小的事实,你可以做这样的事情

SQL> ed
Wrote file afiedt.buf

  1  Create or replace Function A1SF_GETTIME
  2    return varchar2
  3  Is
  4    l_time    varchar2(10) := to_char( sysdate, 'HH24:MI:SS' );
  5    l_message Varchar2(30) := 'The Current Time is : ' || l_time;
  6  Begin
  7    dbms_output.put_line( l_message );
  8    return l_message;
  9* End;
SQL> /

Function created.

SQL> select a1sf_gettime from dual;

A1SF_GETTIME
--------------------------------------------------------------------------------
The Current Time is : 14:09:47

答案 1 :(得分:1)

这个怎么样?

to_char(sysdate, '"The current time is "hh24:mi:ss')

,如

SQL> select to_char(sysdate, '"The current time is "hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'"THECURRENT
----------------------------
The current time is 09:16:08

答案 2 :(得分:1)

不确定错误是什么,因为你没有显示它:-)但你可以通过以下方式大大简化你的代码:

create function A1SF_GETTIME is
    Temptime Char(50);
begin
    select 'The current time is ' || to_char (sysdate, 'HH24:MI:SS')
        into TempTime from dual;
    dbms_output.put_line (TempTime);
end;

你必须增加TempTime缓冲区的大小,因为它包含所有数据,50对于结果字符串应该足够大。这可以通过你完全摆脱Message这一事实来抵消。

答案 3 :(得分:1)

你的代码并不是那么糟糕......你的字符串缓冲区对你的消息来说太小了!

这样可行:

    Message VARCHAR2(21)