create or replace procedure MISAPP_GJCK_RJ(WORKMON_IN_B IN NUMBER,   ----起始日期
WORKMON_IN_E IN NUMBER,    ----截止日期
hkd IN NUMBER,   ----
eur IN NUMBER,   ----
cad IN NUMBER  ----) isv_day number;beginv_day := 'select to_date(WORKMON_IN_E,''yyyymmdd'')-to_date(WORKMON_IN_B,''yyyymmdd'')+1 from dual';
执行的时候,最后一行v_day:= 赋值这一行报错ORA=06502 PL/SQL:数字或值错误,字符转到数值的转换错误。v_day 我设的是number型,赋值那个语句得到的是字符型吗?
如果我改成
v_day :=to_number( 'select to_date(WORKMON_IN_E,''yyyymmdd'')-to_date(WORKMON_IN_B,''yyyymmdd'')+1 from dual');
也一样报错ORA=06502 PL/SQL:数字或值错误,字符转到数值的转换错误。请高手指教。

解决方案 »

  1.   

    lz是不是想把'select to_date(WORKMON_IN_E,''yyyymmdd'')-to_date(WORKMON_IN_B,''yyyymmdd'')+1 from dual'的结果赋给v_day,那不能这样直接赋值,等于想把'select to_date(WORKMON_IN_E,''yyyymmdd'')-to_date(WORKMON_IN_B,''yyyymmdd'')+1 from dual'转换成number,当然会报错,用to_number也是一样的道理,用select  into吧:
    select to_date(WORKMON_IN_E,''yyyymmdd'')-to_date(WORKMON_IN_B,''yyyymmdd'')+1 into v_day from dual
      

  2.   

    select to_number(to_date(WORKMON_IN_E,'yyyymmdd')-to_date(WORKMON_IN_B,'yyyymmdd')+1) into v_day from dual;
      

  3.   

       select to_date(WORKMON_IN_E,'yyyymmdd') -to_date(WORKMON_IN_B,'yyyymmdd')+1 into v_day from dual;  
      

  4.   

    create or replace procedure MISAPP_GJCK_RJ(WORKMON_IN_B IN NUMBER, ----起始日期
    WORKMON_IN_E IN NUMBER, ----截止日期
    hkd IN NUMBER, ----
    eur IN NUMBER, ----
    cad IN NUMBER ----) isv_day number:=0;--在定义变量时,最好对其进行初始化
    v_sql varchar2(400);
    begin--v_day := 'select to_date(WORKMON_IN_E,''yyyymmdd'')-to_date(WORKMON_IN_B,''yyyymmdd'')+1 from dual'; 
    v_sql := 'select to_date(:1,''yyyymmdd'')-to_date(:2,''yyyymmdd'')+1 from dual';--查询出来的值要保存到一个变量中
    execute immediate v_sql into v_day using WORKMON_IN_E,WORKMON_IN_B;
    dbms_output.put_line(v_day);
    end MISAPP_GJCK_RJ;
    /
      

  5.   

    select to_date(to_char(WORKMON_IN_E),'yyyymmdd')-to_date(to_char(WORKMON_IN_B),'yyyymmdd')+1 into v_day from dual;WORKMON_IN_E、WORKMON_IN_B这两变量是NUMBER吧?
      

  6.   

    v_day := 'select to_date(WORKMON_IN_E,''yyyymmdd'')-to_date(WORKMON_IN_B,''yyyymmdd'')+1 from dual';楼主的做法是给一个数字变量v_day赋值一个字符串吧。
    那个sql不能执行。