日期:2014-05-17  浏览次数:20775 次

Oralce 写函数的问题
我用toda写的写面这个函数
CREATE   OR   REPLACE   FUNCTION   TIEXIN.GetTheTime
(OLDTIME   INT)  
RETURN   VARCHAR2
IS
THEHOUR   int;
THEMIN   int;
THESEC   int;
STRTIME   VARCHAR2(20000);
BEGIN
IF   OLDTIME   <   60   THEN
        STRTIME   :=   TO_CHAR(OLDTIME)   ||   ' ' '秒 ' ' ';
ELSE
        THEMIN   :=   OLDTIME/60;
        THESEC   :=   MOD(60,OLDTIME);
        IF   THEMIN   > =   60   THEN
                THEHOUR   :=   THEMIN/60;
                THEMIN   :=   MOD(60,THEMIN);
                STRTIME   :=   TO_CHAR(THEHOUR)   ||   ' ' '小时 ' ' '   ||   TO_CHAR(THEMIN)   ||   ' ' '分 ' ' '   ||   TO_CHAR(THESEC)   ||   ' ' '秒 ' ' ';
ELSE
STRTIME   :=   TO_CHAR(THEMIN)   ||   ' ' '分 ' ' '   ||   TO_CHAR(THESEC)   ||   ' ' '秒 ' ' ';
        END   IF;
END   IF;
RETURN   STRTIME; 
END   GetTheTime;

他总是报
PLS-00103:   出现符号   " "在需要下列之一时:
  begin   case
      declare   end   exception   exit   for   goto   if   loop   mod   null   pragma
      raise   return   select   update   while   with   <an   identifier>
      <a   double-quoted   delimited-identifier

这个错误....请专家指教一下.....谢谢

------解决方案--------------------
要写 '的话,需要写4个 '
' ' '都改成 ' ' ' '


看下还有错没?
------解决方案--------------------
你这里面有什么非法字符,我COMMENT完了还运行不通过,后来自己按照你的写一遍通过;
注意STRTIME VARCHAR2(20000); 没有20000的长度;

SQL> CREATE OR REPLACE FUNCTION GETTHETIME(OLDTIME IN INT)
2 RETURN VARCHAR2
3 IS
4 THEHOUR int;
5 THEMIN int;
6 THESEC int;
7 STRTIME VARCHAR2(2000);
8 BEGIN
9 IF OLDTIME < 60 THEN
10 STRTIME := TO_CHAR(OLDTIME) || ' ' '秒 ' ' ';
11 ELSE
12 THEMIN := OLDTIME/60;
13 THESEC := MOD(60,OLDTIME);
14 IF THEMIN > = 60 THEN
15 THEHOUR := THEMIN/60;
16 THEMIN := MOD(60,THEMIN);
17 STRTIME := TO_CHAR(THEHOUR) || ' ' '小时 ' ' ' || TO_CHAR(THEMIN)
|| ' ' '分 ' ' ' || TO_CHAR(THESEC) || ' ' '秒 ' ' ';
18 ELSE
19 STRTIME := TO_CHAR(THEMIN) || ' ' '分 ' ' ' || TO_CHAR(THESEC)
|| ' ' '秒 ' ' ';
20 END IF;
21 END IF;
22 return StrTime;
23 END GETTHETIME;
24 /

Function created