Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура с динамическим SQL - что я делаю не так? / 7 сообщений из 7, страница 1 из 1
30.01.2017, 11:21
    #39394459
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура с динамическим SQL - что я делаю не так?
Подскажите, что неправильно в таком примере:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
DECLARE

  --Helper objects
  ERR_TABLE_NOT_EXIST EXCEPTION;
  PRAGMA EXCEPTION_INIT (ERR_TABLE_NOT_EXIST, -00942);

BEGIN

  --Prepare DBMS
  DBMS_OUTPUT.ENABLE;
  DBMS_OUTPUT.PUT_LINE ('-');

  --Store resultset into temporary table
  BEGIN
    insert into TMP_INACTIVE_CLIENTS (CUSTOMER_ID, GROUP_NAME)
    select C.CUSTOMER_ID, G.NAME as GROUP_NAME
    from ...;
  EXCEPTION
    when ERR_TABLE_NOT_EXIST then
      BEGIN
        execute immediate('create global temporary table TMP_INACTIVE_CLIENTS (CUSTOMER_ID number not null, GROUP_NAME varchar2(100)) on commit delete rows');
        execute immediate('alter table TMP_INACTIVE_CLIENTS add (constraint TMP_INACTIVE_CLIENT_PK primary key (CUSTOMER_ID))');
        null;
      END;
    when OTHERS then raise;
  END;

<<done>>
open :RECORDSET for
select * from TMP_INACTIVE_CLIENTS
;

END;
/



При запуске получаю сообщение об ошибке из-за несуществующего объекта TMP_INACTIVE_CLIENTS.
Но разве он не должен быть создан в обработчике?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
30.01.2017, 11:31
    #39394469
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура с динамическим SQL - что я делаю не так?
Alibek B.Подскажите, что неправильно в таком примере
переходи на мускул, там считается нормальным создавать таблицы из процедуры
...
Рейтинг: 0 / 0
30.01.2017, 11:32
    #39394470
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура с динамическим SQL - что я делаю не так?
Alibek B.Но разве он не должен быть создан в обработчике?Включи мозг и пойми, что, чтобы попасть в кусок кода, этот код нужно сперва скомпилировать.

Говнокод detected.
...
Рейтинг: 0 / 0
30.01.2017, 11:39
    #39394474
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура с динамическим SQL - что я делаю не так?
123ййтам считается нормальным создавать таблицы из процедуры
Ну допустим не таблицу, а временную таблицу.
И честно говоря не вижу криминала в сценарии "для вспомогательных данных создать объект, затем его удалить".

ElicВключи мозг и пойми, что, чтобы попасть в кусок кода, этот код нужно сперва скомпилировать.
Из этого следует, что временную таблицу нужно создать перед тем, как она будет использована в процедуре (или использовать в процедуре динамический SQL)?
Странный подход. Ок, сделаю таблицу заранее.
...
Рейтинг: 0 / 0
30.01.2017, 12:22
    #39394510
Viewer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура с динамическим SQL - что я делаю не так?
Alibek B.Из этого следует, что временную таблицу нужно создать перед тем, как она будет использована в процедуре (или использовать в процедуре динамический SQL)?
Странный подход.
Ничего странного, как уже сказал Elic, код для выполния нужно сначала скомпилировать, и ошибка выпадает на этапе комипиляции, до выполнения дело не доходит.
Обернув insert в execute immediate, компиляция проходит без проверки начия таблицы и код отрабатывет корректно...
...
Рейтинг: 0 / 0
30.01.2017, 14:40
    #39394703
Futbolist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура с динамическим SQL - что я делаю не так?
А если бы это скомпилировалось, то потеряли бы одного неактивного клиента при первом Insert-е )
...
Рейтинг: 0 / 0
31.01.2017, 11:08
    #39395235
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура с динамическим SQL - что я делаю не так?
>>Ничего странного

Более того, по временным таблицам можно собрать статистику, построить индексы, а так тебе эти буквы придётся тоже в коде поддерживать...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура с динамическим SQL - что я делаю не так? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]