2015-10-30 5 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

подавай пространство после того, как из (выберите «» ПЭМ «» от «|| v_tabl_name ||», а также использовать в предложении в вашей вставки заявлении. – Buddi

+0

Правильно, я ставлю место после того, как из ... странно но это работает :) спасибо. Я не знаю, почему, когда я помещаю свой код без предложения «в». – 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

По-прежнему возникают проблемы с другим оператором немедленного выполнения ... execute instant 'select count (*) в v_zmienna из user_tables, где table_name = ||' '' || v1_tabl_name || ''; Как, черт возьми, я могу это сделать? Предположим, что есть некоторая проблема с перевернутыми запятыми ... Я действительно смущен – bazyl

+0

вам нужно передать локальную переменную в качестве параметра для немедленного выполнения см. Ссылку http://stackoverflow.com/questions/20615600/oracle-how-to- use-procedure-local-variables-for-execute-instant-statements – are

+0

Конечно, я сделал это, объявляю v1_table_name varchar2 (30). Но есть некоторые проблемы, когда я хочу использовать эту переменную для «table_name». Когда я использую его, например. выполнить немедленную «вставить в» || v1_table_name || (...) - он работает нормально, но есть некоторые проблемы, когда я пытаюсь поместить его в where clause .... Проблестная проблема с кавычками;/ – bazyl

Смежные вопросы