2014-01-20 2 views
4

Я хочу создать таблицу внутри процедуры. я попытался поместить запрос создания в строку, а затем выполнить немедленную строку. например:Как создать таблицу внутри процедуры в oracle?

create or replace procedure hr.temp is 
    var1 varchar2(4000); 
begin 
    var1:='create table hr.temp(
      id number)'; 
    execute immediate var1; 
end temp; 

но когда я выполнить эту процедуру, я получаю ошибку:

ORA-00911: invalid character 
ORA-06512: at "SYS.TEMP", line 6 
. 
. 
. 

есть ли способ я могу это сделать?

+3

Do *** NOT *** создайте процедуры в учетной записи SYS. Не делай этого. Когда-либо. (После того, как вы переместите эту процедуру в правильную учетную запись: внутри динамического SQL вы не должны указывать символ ';'. Execute instant может выполнять только один оператор в любом случае, поэтому не требуется символ окончания) –

+0

из-за вашего предложения я его изменил для hr-схемы, но результат тот же –

+0

я удалил символ ';', теперь, когда я выполняю процедуру, она начинается, но никогда не заканчивается, это похоже на то, что процедура находится в цикле, который никогда не заканчивается! –

ответ

1

Попробуйте это. Он должен работать ...

create or replace procedure hr.temp is 
    var1 varchar2(4000); 
BEGIN 
    var1:='create table hr.temp2(
      id number)'; 
    EXECUTE IMMEDIATE var1; 
end temp; 
0

ответ m.r 'a_horse_with_no_name' является правильным. Первый момент: я не должен создавать таблицу в sys-схеме.

Второй момент заключается в динамическом sql. Я не должен использовать символ ; в динамическом sql.