2013-03-09 8 views
-1

Мне нужна помощь по этому вопросу.анонимный блок в 11g

Я пытаюсь создать анонимный блок pl/sql, и когда я запускаю его, он показывает его завершенное, но он не запускает код. Это должно дать мне ошибку, говоря, что имя уже используется существующим объектом. Может кто-нибудь помочь мне в этом. Я фактически создаю процедуры, но просто пытаюсь использовать этот код в качестве образца.

DECLARE 

    V_REF_TBL      VARCHAR2(100); 
    V_SQL       LONG; 

begin 
    V_REF_TBL :='My_TABLE'; 
    v_SQL :='truncate table '||V_REF_TBL ; 
    EXECUTE IMMEDIATE V_SQL; 

    EXECUTE IMMEDIATE 'CREATE TABLE '|| V_REF_TBL ||' parallel 9 nologging pctfree 0 as 
    select * from dual'; 
End; 
+0

К сожалению, я не могу воспроизвести это. Если таблица существует, я получаю сообщение об ошибке «Имя уже используется существующим объектом» при запуске вашего кода. Если таблица не существует, я получаю ошибку «таблица или представление не существует». –

+0

Зачем вам нужно использовать динамический sql? – Tiago

+0

Зачем вам нужно обрезать таблицу, которая не существует? Почему вы пытаетесь создать таблицу, которая уже существует? Вы пытаетесь внедрить временную таблицу? Если это так, у оракула есть лучшие решения. http://stackoverflow.com/a/2042029/146325 – APC

ответ

0

Возможно, вы ищете это:

<<my_block>> 
    Declare 
    table_name varchar2(30); 
    counter number; 
    Begin 
    table_name := 'my_table'; 

    select count(*) 
    into counter 
    from user_tables 
    where table_name = Upper(Trim(my_block.table_name)) and 
      dropped = 'NO'; 

    if counter = 0 
    then 
     execute immediate 'create table '||table_name||' as ... etc'; 
    else 
     execute immediate 'truncate table '||table_name; 
     execute immediate 'insert into '||table_name' select ... etc'; 
    end if; 
    end my_block; 
Смежные вопросы