Перейти к содержимому

Фотография

создание таблиц в процедуре...


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 Astashonok

Astashonok

    Новый участник

  • Members
  • Pip
  • 37 сообщений

Отправлено 31 марта 2008 - 09:07

новая неделя - новые вопросы)
возникла необходимость создания таблицы в процедуре...
для того, чтобы разобраться написал маленький пример... а он не работает...

PROCEDURE TEST
 (
  myorderid IN NUMBER
 )
IS

 porderid NUMBER;
 BEGIN
  IF porderid IS NULL THEN

	create table MYTEMP 
(
	myrownum number,
	myorderid integer,
	mylinktype integer, 

);
	
  END IF;
END;


ошибка такая:

(1): PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:
(1): 
(1):	begin case declare exit for goto if loop mod null pragma
(1):	raise return select update while with <an identifier>
(1):	<a double-quoted delimited-identifier> <a bind variable> <<
(1):	close current delete fetch lock insert open rollback
(1):	savepoint set sql execute commit forall merge
(1):	<a single-quoted SQL string> pipe

тут нет "create or replace", т.к. создается в sql навигаторе...
  • 0
  • Зачем идти в разработчики, когда столько кайфа в тестировании?!

#2 LEk

LEk

    Новый участник

  • Members
  • Pip
  • 65 сообщений
  • ФИО:Екатерина
  • Город:Новосибирск

Отправлено 01 апреля 2008 - 02:53

новая неделя - новые вопросы)

Вопросы новые, а ответы старые. Всё тот же EXECUTE IMMEDIATE. Почитайте документацию по PL/SQL для начала
  • 0

#3 idunin

idunin

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Илья Владимирович
  • Город:Москва


Отправлено 01 апреля 2008 - 08:05

новая неделя - новые вопросы)
возникла необходимость создания таблицы в процедуре...
для того, чтобы разобраться написал маленький пример... а он не работает...


Вам правильно написали про EXECUTE IMMEDIATE. Все DDL операции+динамические запросы (начиная с 9i) в oracle выполняются с помощью данной команды.

Будет примерно так:

CREATE OR REPLACE PROCEDURE TEST (myorderid IN NUMBER)
IS
   porderid   NUMBER;
BEGIN
   IF porderid IS NULL
   THEN
	  sqltext :=
			'create table MYTEMP ('
		 || CHR (10)
		 || 'myrownum number,'
		 || CHR (10)
		 || 'myorderid integer,'
		 || CHR (10)
		 || 'mylinktype integer'
		 || CHR (10)
		 || ')';

	  EXECUTE IMMEDIATE sqltext;
   END IF;
END;

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных