SQL> edit
已写入 file afiedt.buf  1  CREATE or replace FUNCTION  tran_dept (dept  in   char)
  2     RETURN  char
  3   AS
  4     v    char ;
  5     BEGIN
  6     case  dept
  7      When 'cs' THEN v:='计算机系';
  8      When 'is' THEN v:='信息系';
  9      When 'ms' THEN v:='数学系';
 10     END case;
 11   return (v);
 12*  END tran_dept ;
SQL> /函数已创建。SQL> select tran_dept('cs') from dual;
select tran_dept('cs') from dual
       *
第 1 行出现错误:
ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在 "SYSTEM.TRAN_DEPT", line 7
请问这是咋的啦,如何改?

解决方案 »

  1.   

    1  CREATE or replace FUNCTION  tran_dept (dept  in  varchar2) 
      2    RETURN  varchar2
      3  AS 
      4    v    varchar2(20); 
      5    BEGIN 
      6    case  dept 
      7      When 'cs' THEN v:='计算机系'; 
      8      When 'is' THEN v:='信息系'; 
      9      When 'ms' THEN v:='数学系'; 
    10    END case; 
    11  return (v); 
    12*  END tran_dept ; 
    SQL> / 
      

  2.   

    你的函数参数Dept定义的 char型.
    能否接两个字符作为参数呢.
      

  3.   

    在ORACLE中定义字符串,都是用的VARCHAR2,CHAR是定义字符的.
    提示你的字符缓冲区不足.
      

  4.   

     1  CREATE or replace FUNCTION  tran_dept (dept  in  char(2)) 1  CREATE or replace FUNCTION  tran_dept (dept  in  varchar(2)) 
     
      

  5.   

    将  v    char ; 
    改写成v char(2);
    在PL/SQL中的函数定义变量是需要长度的!