oracle函数代码:CREATE OR REPLACE FUNCTION X_ZTE_TIME
--(YTIME date)RETURN VARCHAR2 ISTYPE GROUPONE IS VARRAY(300) OF VARCHAR2(23);
AA GROUPONE ;
PT VARCHAR2(20);
BB VARCHAR2 (1);BEGIN
  PT:=to_char(sysdate,'yyyy');
 IF substr(PT,3,1) =0
  THEN
  BB:=substr(PT,4,1);
  END IF;
 IF substr(PT,3,1) <>0
  THEN
  AA := GROUPONE('A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','T','U','V','W','X','Y');
  BB:= AA(MOD(MOD(PT,100)-10,22)+1);
  END IF;
  RETURN (BB);
  END;在PL/SQL中执行是没问题的但是在delphi中一调用就出现了:ORA-06553:PLS-306:wrong number or types of arguments in call to ‘X_ZTE_time’不知道到底是哪里出现问题了,求解

解决方案 »

  1.   

    你的入参的类型弄错了,。改成VARCHAR2看看!
      

  2.   

    Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 
    Connected as scott
     
    SQL> 
    SQL> CREATE OR REPLACE FUNCTION X_ZTE_TIME
      2  --(YTIME date)
      3  
      4   RETURN VARCHAR2 IS
      5  
      6    TYPE GROUPONE IS VARRAY(300) OF VARCHAR2(23);
      7    AA GROUPONE;
      8    PT VARCHAR2(20);
      9    BB VARCHAR2(1);
     10  
     11  BEGIN
     12    PT := to_char(sysdate, 'yyyy');
     13    IF substr(PT, 3, 1) = 0 THEN
     14      BB := substr(PT, 4, 1);
     15    END IF;
     16    IF substr(PT, 3, 1) <> 0 THEN
     17      AA := GROUPONE('A',
     18                     'B',
     19                     'C',
     20                     'D',
     21                     'E',
     22                     'F',
     23                     'G',
     24                     'H',
     25                     'J',
     26                     'K',
     27                     'L',
     28                     'M',
     29                     'N',
     30                     'P',
     31                     'Q',
     32                     'R',
     33                     'T',
     34                     'U',
     35                     'V',
     36                     'W',
     37                     'X',
     38                     'Y');
     39      BB := AA(MOD(MOD(PT, 100) - 10, 22) + 1);
     40    END IF;
     41    RETURN(BB);
     42  END;
     43  /
     
    Function created
     
    SQL> 
    SQL> select X_ZTE_TIME from dual
      2  ;
     
    X_ZTE_TIME
    --------------------------------------------------------------------------------
    C
     
    SQL> 
      

  3.   

    数据库调用没问题,delphi调用出问题,还不知道在哪?就在delphi里面呗。本来有个输入参数,又注释掉了,你delphi改了没有,还在往里传吗?出现问题的代码不贴,贴一堆没问题的代码,让人陪你猜闷吗?
      

  4.   

    我看不太明白,这是什么意思, 跟我没什么两样啊,我知道我的在PL/SQL执行一点问题都没有,有返回值的,但是在delphi 中条调用的时候就是取不到返回值,我不知道到底是什么问题了。
      

  5.   

    但是报的是oracle 的错误
    ORA-06553:PLS-306:wrong number or types of arguments in call to ‘X_ZTE_time’
      

  6.   

    ORA-06553:PLS-306:wrong number or types of arguments in call to ‘X_ZTE_time’
    以我对delphi的粗浅理解就是你把函数当作过程调用了
      

  7.   

    没有,帮我看一下是不是字符数值转换是有问题?
    函数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’