函数1:CREATE OR REPLACE FUNCTION X_TIME
(QD IN DATE)
RETURN VARCHAR2 IS GROUPONE VARCHAR2(50) DEFAULT 'ABCDEFGHJKLMNPQRTUVWXY';
 PT VARCHAR2(50);
 A integer;
 RESULT VARCHAR2(10);BEGIN
  PT := TO_CHAR(QD,'yyyy');
  IF substr(PT, 3, 1) = '0' THEN
  RESULT:= substr(PT, 4, 1);
  END IF;
  IF substr(PT, 3, 1) <> '0' THEN
  A:=MOD(MOD(to_number(PT),100)-10,22)+1;
  RESULT := SUBSTR(GROUPONE,A,1);
  END IF;
  RETURN(RESULT);
  END;函数2:调用上面的函数
CREATE OR REPLACE FUNCTION X_ZTEreturn varchar2 isresult varchar2(10);
begin select sajet.x_time(sysdate) into result from dual;
 
return(result);
end;是不是字符数值转换是有问题?
外部开发语言调用的话,只要返回值是char,就ok ,
但是为什么还是报:ORA-06553:PLS-306:wrong number or types of arguments in call to ‘X_MAC’

解决方案 »

  1.   

    问题不出在这两个函数(如下), X_MAC 是哪里来的,问题和它有关
    SQL> ed
    已写入 file afiedt.buf  1  CREATE OR REPLACE FUNCTION X_TIME
      2  (QD IN DATE)
      3  RETURN VARCHAR2 IS
      4  GROUPONE VARCHAR2(50) DEFAULT 'ABCDEFGHJKLMNPQRTUVWXY';
      5  PT VARCHAR2(50);
      6  A integer;
      7  RESULT VARCHAR2(10);
      8  BEGIN
      9     PT := TO_CHAR(QD,'yyyy');
     10     IF substr(PT, 3, 1) = '0' THEN
     11             RESULT:= substr(PT, 4, 1);
     12     END IF;
     13     IF substr(PT, 3, 1) <> '0' THEN
     14             A:=MOD(MOD(to_number(PT),100)-10,22)+1;
     15             RESULT := SUBSTR(GROUPONE,A,1);
     16     END IF;
     17  RETURN(RESULT);
     18* END;
     19  /函数已创建。SQL> ed
    已写入 file afiedt.buf  1  CREATE OR REPLACE FUNCTION X_ZTE
      2  return varchar2 is
      3  result varchar2(10);
      4  begin
      5     select sajet.x_time(sysdate) into result from dual;
      6     return(result);
      7* end;
      8  /警告: 创建的函数带有编译错误。SQL> show err
    FUNCTION X_ZTE 出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    5/2      PL/SQL: SQL Statement ignored
    5/9      PL/SQL: ORA-00904: "SAJET"."X_TIME": 标识符无效
    SQL> ed
    已写入 file afiedt.buf  1  CREATE OR REPLACE FUNCTION X_ZTE
      2  return varchar2 is
      3  result varchar2(10);
      4  begin
      5     select x_time(sysdate) into result from dual;
      6     return(result);
      7* end;
    SQL> /函数已创建。SQL> select x_zte from dual;X_ZTE
    -------------------------------------------------------------------------------
    --------------------
    CSQL>
      

  2.   


    不好意思,报的错误是ORA-06553:PLS-306:wrong number or types of arguments in call to ‘X_ZTE’老报错误类型,不知道为什么