【问题标题】:Quote issue during execute immediate立即执行期间的报价问题
【发布时间】:2020-12-17 07:18:40
【问题描述】:

获取立即执行的语法错误

select distinct hire_date BULK COLLECT into v_yr from employees;
 
 for i in 1..v_yr.count LOOP
 

   
 v_1:='select * from employees where EXTRACT(YEAR FROM TO_DATE(HIRE_DATE,'''
    ||DD-MM-RR
||'''
||'=:1';

     open c_emp for v_1 using v_yr(i);

【问题讨论】:

    标签: oracle plsql execute-immediate


    【解决方案1】:

    也许是这个?

    select distinct extract(year from hire_date)
      bulk collect into v_yr
      from employees;
     
    for i in 1..v_yr.count loop
    
       for c_emp in (select *
                       from employees
                      where extract(year from hire_date) = v_yr(i)) loop
    .
    .
    .
       end loop;
    
    end for;
    

    【讨论】:

    • 你也可以帮我解决以下问题:
    • 立即执行 'UTL_FILE.fopen ('''||CSVDIR||''', '''||empdata.csv||:1''', '''||w| |''', '''||1000||''')' 使用 v_emp(i) 我收到上述错误。我认为问题出在引号上。我想要 empdata.csv1,empdata.csv2....等在运行时从集合 v_emp;
    • 再说一次,我认为你不需要execute immediate。声明一个 var f1 utl_file.file_type; 然后 f1 := utl_file.fopen(CSVDIR, 'empdata.csv'||i, 'w', 1000);
    • v_1:= 'select * from employees where EXTRACT(YEAR FROM HIRE_DATE)=:1 AND EXTRACT(month FROM Hire_date)=:2 AND to_number(to_char(to_date(HIRE_DATE,'DD/MM/ YYYY'),'WW'))=:3' ;在这种情况下我能做什么?我想在运行时输入 1、2、3 等周数
    • @TBose 您也可以在这些情况下使用 PL/SQL 变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多