Динамический SQL не работает должным образом - PullRequest
0 голосов
/ 06 апреля 2010
create or replace procedure createtables
  Authid current_user as
begin
  execute immediate 'create table newcustomer as select * from customer';
end;

create or replace procedure e
is
begin
 createtables;
 select * from newcustomer; 
end;

Я получил две процедуры выше. первая создаст новые таблицы с именем newcustomer, вторая процедура вызовет первую процедуру и запрос к таблице newcustomer. когда я пытаюсь скомпилировать этот код, он говорит, что таблица еще не создана, я не получаю ее, поскольку я вызвал процедуру createtables, поэтому я предполагаю, что создал таблицу.

Любая помощь будет оценена. Спасибо

1 Ответ

3 голосов
/ 06 апреля 2010

Компиляция второй процедуры без выполнения Первая процедура не будет выполнена, так как таблица не была создана.

Вы не можете скомпилировать процедуру, основанную на несуществующих объектах.

Используйте EXEC createtables перед созданием процедуры e и не вызывайте createtables там.


Процедура e также не будет компилироваться, поскольку вы не используете результаты select * from newcustomer в качестве курсора или сохраняете результаты в переменных.


EDIT

Вместо процедур вы можете использовать анонимный блок. Поместите в файл следующее и выполните его (например, через SQL * Plus):

Create Table newcustomer As Select * From customer;

Begin
  Null; --# Do something with your new table in here.
End;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...