大家好:
   我的导出SQL(名称为cell.sql)如下:
 str_temp=` date +"%Y%m%d" `  
str_temp1=` date+1 +"%Y%m%d" `  
set pages 50000;
set lines 200;    
set trims on;
set heading off;
spool /opt/BOCO.DAL/NPM/wlan/data/source/cell.lst;
select serverid||' '||bssid||' '||servicetype||' '||scan_start_time||' '||RevReceiveByteNum||' '||RevReceiveByteNum*8/1000/3600||' '||FwdTransmitBytes||' '||FwdTransmitBytes*8/1000/3600
from c_tpd_cnt_bsc_flux_do_zx where scan_start_time>=$str_temp and scan_start_time<$str_temp1 order by scan_start_time; 
spool off;
exit
现在的问题是:变量 str_temp和str_temp1处报错,请问正确的怎么写啊??

解决方案 »

  1.   


    ------使用绑定变量
    var :s date;   
    var :t date;
    execute :s:=sysdate;:t:=sysdate+1;
    set pages 50000;
    set lines 200;   
    set trims on;
    set heading off;
    spool /opt/BOCO.DAL/NPM/wlan/data/source/cell.lst;
    select serverid||' '||bssid||' '||servicetype||' '||scan_start_time||' '||RevReceiveByteNum||' '||RevReceiveByteNum*8/1000/3600||' '||FwdTransmitBytes||' '||FwdTransmitBytes*8/1000/3600
    from c_tpd_cnt_bsc_flux_do_zx where scan_start_time>=:s and scan_start_time<:t order by scan_start_time;  
    spool off;
    exitSQL> var s date;
    SQL> var t date;
    SQL> execute :s:=sysdate;:t:=sysdate+1;PL/SQL procedure successfully completed
    s
    ---------
    2010-12-27 下午 06:48:38
    t
    ---------
    2010-12-28 下午 06:48:38SQL> select * from dual sysdate between s and t;select * from dual sysdate between s and tORA-00933: SQL 命令未正确结束SQL> select * from dual where sysdate between s and t;select * from dual where sysdate between s and tORA-00904: "T": 标识符无效SQL> select * from dual where sysdate between :s and :t;DUMMY
    -----
    X
    s
    ---------
    2010-12-27 下午 06:48:38
    t
    ---------
    2010-12-28 下午 06:48:38SQL> 
      

  2.   

    --使用替换变量
    set pages 50000;
    set lines 200;  
    set trims on;
    set heading off;
    col date1 new_value str_temp;
    col date2 new_value str_temp1;
    select to_char(sysdate,'yyyymmdd') date1 from dual;
    select to_char(sysdate,'yyyymmdd') date2 from dual;
    spool /opt/BOCO.DAL/NPM/wlan/data/source/cell.lst;
    select serverid||' '||bssid||' '||servicetype||' '||scan_start_time||' '||RevReceiveByteNum||' '||RevReceiveByteNum*8/1000/3600||' '||FwdTransmitBytes||' '||FwdTransmitBytes*8/1000/3600
    from c_tpd_cnt_bsc_flux_do_zx where scan_start_time>=to_date('&str_temp','yyyymmdd') and scan_start_time<to_date('&str_temp1','yyyymmdd') order by scan_start_time; 
    --如果scan_start_time是字符型就不用to_date转换
    spool off;
    exit
      

  3.   


    --直接替换变量
    set pages 50000;
    set lines 200;   
    set trims on;
    set heading off;
    spool /opt/BOCO.DAL/NPM/wlan/data/source/cell.lst;
    select serverid||' '||bssid||' '||servicetype||' '||scan_start_time||' '||RevReceiveByteNum||' '||RevReceiveByteNum*8/1000/3600||' '||FwdTransmitBytes||' '||FwdTransmitBytes*8/1000/3600
    from c_tpd_cnt_bsc_flux_do_zx where scan_start_time>=&str_temp and scan_start_time<&str_temp1 order by scan_start_time;  
    spool off;
    exit
      

  4.   

    这几天上不了网呢,终于可以上了今天,谢谢大家了啊!
    2#的和我的想要的一样呢,修改成和我的表结构一样的,果然可以呢,谢谢拉!
    3#的也是可以的呢,只是要手工输入&str_temp and &str_temp1
    还有1#的都谢谢了呢