2015-10-30 110 views
1

我试图用execute immediate语句将数据插入表中。但我得到一个错误立即执行语句

FROM keyword not found where expected 

任何人都可以看看有什么不对?后

declare 
    c1 SYS_REFCURSOR; 
    v_tabl_name varchar2(30); 
begin 
    open c1 for 
    select tablename from table1; 

    LOOP 
    FETCH c1 INTO v_tabl_name; 
    EXIT WHEN c1%NOTFOUND; 

    execute immediate 'insert tabl2(tabl_name) (select ''tem'' from'||v_tabl_name||')' ; 
    END LOOP; 

    close c1; 
end; 
+3

给空间距离(选择'TEM“”“|| v_tabl_name ||”,还可以使用到子句中的INSERT语句。 – Buddi

+0

对,我把空间之后,从...怪异但它工作:)谢谢。我不知道为什么我在没有“into”子句的情况下放置代码。 – bazyl

+0

这并不奇怪,如果你考虑一下。这是'fromtable_name'和'from table_name'之间的区别。一个是语法正确的,另一个不是...... – Boneist

回答

0
create table table1(tem varchar2(50), tablename varchar2(50)); 
create table tabl2(tabl_name varchar2(50)); 

insert into table1(tem, tablename) values ('table1','table1'); 

begin 
    for rc in (select tablename from table1) loop 
    --dbms_output.put_line('insert into tabl2(tabl_name) (select ''tem'' from '||rc.tablename||')'); 
    execute immediate 'insert into tabl2(tabl_name) (select ''tem'' from '||rc.tablename||')' ;  
    end LOOP; 
end; 
+0

仍然有其他执行即时语句的问题...立即执行'select count(*)into v_zmienna from user_tables where table_name = ||'''|| v1_tabl_name ||'';我该怎么办?假设有引号引起一些问题...我真的很困惑 – bazyl

+0

你需要传递本地变量作为参数执行立即执行 看到这个链接http://stackoverflow.com/questions/20615600/oracle-how-to- use-procedure-local-variables-for-execute-immediate-statements – are

+0

当然,我做到了,声明了v1_table_name varchar2(30)。但是,当我想将该变量用于“table_name”时存在一些问题。当我使用它作为例如。立即执行'insert into'|| v1_table_name || (...) - 它工作正常,但有一些问题,当我试图把它放到where子句中时....可能有一些引号问题;/ – bazyl