v_sql varchar2(1000);
 
v_sql:='select * from emp';--定义sql变量在这句
 open p_cursor for v_sql;--执行sql语句放到游标里面有个问题就是在v_sql:='select * from emp'我要加个where条件还有个TO_DATE(V_START_DATE,'YYYY-MM-DD-24HH:MI:SS');这样的话就是这样了
v_sql:='select * from emp where e.hireDate between TO_DATE(V_START_DATE,'YYYY-MM-DD-24HH:MI:SS') and TO_DATE(V_END_DATE,'YYYY-MM-DD-24HH:MI:SS');'这样的话语法一直报错,不指定怎么去处理

解决方案 »

  1.   


    我的意思是v_sql := "select count(*) from BILL_CC_LOG_IDLE where BUSY_TIME between TO_DATE(in_start_time, 'yyyy-mm-dd hh24:mi:ss') and TO_DATE(in_end_time, 'yyyy-mm-dd hh24:mi:ss') and FREE_TIME is not null";
    这句话表一报告错误,是怎么去处理,一个varchar2的变量,里面还包含单引号的处理情况
      

  2.   

    你拼错了应该是
    v_sql := "select count(*) from BILL_CC_LOG_IDLE where BUSY_TIME between TO_DATE("||in_start_time||", 'yyyy-mm-dd hh24:mi:ss') and TO_DATE("||in_end_time||", 'yyyy-mm-dd hh24:mi:ss') and FREE_TIME is not null";
      

  3.   

    引号中用引号需要转义。s := 'select count(*) from BILL_CC_LOG_IDLE where BUSY_TIME between TO_DATE(' ||
           in_start_time || ', ''yyyy-mm-dd hh24:mi:ss'') and TO_DATE(' ||
           in_end_time || ', ''yyyy-mm-dd hh24:mi:ss'') and FREE_TIME is not null';
      

  4.   

    +1, oracle 单引号代表字符串起始,如果想在字符串中带有单引号,用两个单引号代替
      

  5.   

    'select count(*) from BILL_CC_LOG_IDLE where BUSY_TIME between TO_DATE(' ||
           in_start_time || ', ''yyyy-mm-dd hh24:mi:ss'') and TO_DATE(' ||
           in_end_time || ', ''yyyy-mm-dd hh24:mi:ss'') and FREE_TIME is not null';
      

  6.   

    我觉得你可以先到PL/SQL里面把sql output出来,再贴进去撒,那样测试也好定位具体哪错了..
    楼上应该给出答案咯//