在oracle里创建一个表 其中的一个项是DOB(date of birth),当时建的时候写的类型是 DOB date,后来在jdeveloper里创建了一个sql包写到数据库里 然后发布web service 
在定义这个表的包的时候创建插入数据的方法时,定义如下:
FUNCTION insert_tblcustomers(customerid IN NUMBER,DOB IN DATE) RETURN VARCHAR2 IS
    begin
    EXECUTE IMMEDIATE 'insert into tblcustomers values ('''||customerid||''',to_date('''||DOB||''',''yyyymmdd''),'''    )'  ;
    EXECUTE IMMEDIATE 'commit';
    return '1';
    end;但是在在发布完web service后在主页里调用这个insert方法时 却出现了日期不对的情况
不知道是因为DOB的设置类型的问题还是返回类型的问题?
各位tz 先谢谢了

解决方案 »

  1.   

    你这里要先to_char一下
    EXECUTE IMMEDIATE 'insert into tblcustomers values ('''||customerid||''',to_date('''||to_char(DOB,'yyyymmdd')||''',''yyyymmdd''),'''    )'  ; 
      

  2.   

    try it:insert into tblcustomers values (customerid,to_date(to_char(dob,'yyyy-mm-dd'));
      

  3.   

    多谢两位 正准备试 可是出现了新的问题 oc4j启动的问题
    有一天没开jdeveloper了 今天开之前启动的时候并不是马上就出现initialized的字样 但也没在意 但是在测试connection的时候发现连不了了 于是我把user换成了oc4jadmin(之前是admin)密码照旧 就可以连接 
    可是我之前的所有的wervice都发布在admin的connection上 这是怎么回事呢 为什么user 会自动变成oc4jadmin呢?
      

  4.   

    所以在funcation里的DOB的类型写 in date是没有问题的?
    不过还是出错
    是不是我输入的方式有问题
    我输入的是yyyymmdd eg.19990909 
      

  5.   

    用判定变量CREATE OR REPLACE FUNCTION insert_tblcustomers(customerid IN NUMBER,DOB IN DATE) 
    RETURN VARCHAR2 
    AS 
    begin 
        EXECUTE IMMEDIATE 'insert into tblcustomers values (to_char(:customerid)', :dob)'
         using customerid, dob  ; 
        EXECUTE IMMEDIATE 'commit'; 
        return '1'; 
    end; 
      

  6.   

    CREATE OR REPLACE FUNCTION insert_tblcustomers(customerid IN NUMBER,DOB IN DATE) 
    RETURN VARCHAR2 
    AS 
    begin 
        EXECUTE IMMEDIATE 'insert into tblcustomers values ('''' || to_char(:customerid) || '''', :dob)'
         using customerid, dob  ; 
        --EXECUTE IMMEDIATE 'commit'; 
        return '1'; 
    end;