powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / truncate table from sp at oracle
18 сообщений из 18, страница 1 из 1
truncate table from sp at oracle
    #32145091
ARufanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Мне нужно выполнить команду truncate table XXX, причем имя таблицы я знаю только во время исполнения. Делать все это нужно из хранимой процедуры которая запускается с помощью job. Может кто нибудь подскажет:
1.Есть ли способ заставить в Oracle-у процеду не открывать транзакцию. (Я так понимаю что это является помехой для выполнения truncate table XXX из процедуры).
2.Есть ли способ заставить работать truncate table XXX через динамический SQL (Я так понимаю что truncate не является DDL и поэтому DBMS_SQL.PARSE(...,V_SQL,...) где V_SQL:='TRUNCATE TABLE'||V_TABLE_NAME не будет исполняться). Может можно обойти эту проблему через cmdexec(???) или что нибудь в этом духе.
С уважением,
Руфанов Артем.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32145103
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А execute immediate не помогает? truncate, кстати, самый что ни на есть DDL, а за использование DDL в хранимом коде девелоперов принято вешать за яйца на фонарных столбах, предварительно выпустив кишки тупым кухонным ножом.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32145119
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> create procedure p_trunc is begin execute immediate 'truncate table emp'
; end;
   2   /

Procedure created.

SQL> execute p_trunc;

PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32145469
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а за использование DDL в хранимом коде девелоперов принято вешать за яйца на фонарных столбах, предварительно выпустив кишки тупым кухонным ножом.

Ну это ты загнул. Не хочешь не пользуй, а другим не мешай
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32145551
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты видел, _как_ работают таким образом (создание/удаление таблиц/индексов, модификация структуры "на лету" и проч. прелести) написанные относительно крупные системы? Я видел и знаю, что говорю.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32145575
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
truncate table - это конечно не DDL чистом виде, а больше DML.
Я думаю тут можно спорить.
DBA Oracle вряд-ли конечно будет помещать эту команду в хранимую процедуру, он скорее просто скрипт напишет для SQL*Plus и будет его выполнять по необходимости.

А если писать приложение для пользователей, которые не должны иметь непосредственного доступа к БД, в котором включаются подобные административные функции, то это нормально.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32148361
ARufanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за помощь.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32148373
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Scott:; Scazanno sil'no, dage ochen', no krasivo i verno.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32148555
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scott Tiger

> А ты видел, _как_ работают таким образом (создание/удаление
> таблиц/индексов, модификация структуры "на лету" и проч. прелести)
> написанные относительно крупные системы? Я видел и знаю, что говорю.

Думаю, что ответ человек получил, а то что вы видели в других системах - отнешения к делу не имеет.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32148579
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что человек хотел получить (и, вероятно, получил) ответ на вопрос, возникший вследствие некорректного подхода к проектированию database-части приложения. Я считаю своим долгом предупредить такие вещи и вернуть заблудшего на путь истинный :) Ибо я последнее время связан, в основном, с эксплуатацией различных oracle-based систем, и постоянно встречаю такие и даже худшие "финты" разработчиков, т.е., у меня есть вполне шкурный интерес в том, чтобы приложение было "прямо" написано. А DDL в боевом коде (сервисный не в счёт, там такое допустимо, хотя традиционно такие задачи решаются не хранимым кодом, а пачкой скриптов) - это зло.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32148615
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человеку нужно было очистить всю таблицу от данных. Стандартно он бы это сделал так: DELETE <tab_name>;
Но поскольку мы все знаем, что это не самый лучший способ, тем более для больших таблиц, зачем надо нам делать нагрузку на сегменты отката и редо-логи. Поэтому ипльзуем TRUNCATE TABLE <tab_name>, тем более уменьшая hwm.

Мне кажется вопросы DDL в данном топике и не рассматривались.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32148641
no name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Scott DDL в коде бывает жизненно необходим, пример удаление/создание индексов при мощных вставках. Просто сам текс DDL выражения можно хранить в табличках, давая тем самым возможность просмотра и изменения.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32148660
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человеку нужно было очистить всю таблицу от данных

Зачем это может потребоваться в боевом коде? Не спорю, truncate работает отлично, но полная очистка таблицы не должна быть частью бизнес-логики.

в коде бывает жизненно необходим, пример удаление/создание индексов при мощных вставках

Да, это допустимый вариант в некоторых случаях (не 24*7, гарантированное отсутствие конкуренции за модифицированный объект между пользователями, ну и т.д). Опять же, в этом случае ты знаешь, что удаляешь и что создаёшь - это ещё более-менее. А вот когда приложение сотнями в день плодит таблицы с псевдослучайным именем и непредсказуемым размером, индексирует их "по-минимуму", а потом эти таблицы достаточно интенсивно использует для построения тех или иных выборок - это клиника.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32148680
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Patology..
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32149610
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Scott Tiger: Как представитель этих самых девелоперов , хотел бы рассказать о классическом случае, когда truncate просто необходим:

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

Первой системе для работы необходим набор данных из второй системы.

Ввиду некоторых отличий в архитектуре и т.п (см. п1), данные передаются файлом. Иногда размер файла достигает несколько сотен тысяч записей.

Так вот, для вчитки этого файла в первую систему используется набор из десятка таблиц, которым перед загрузкой каждого файла делают truncate.

Единственное, специальный планировщик + dbms_lock гарантируют, что в системе будет работать только один экземпляр задачи.

Итого, схема работает уже несколько лет...
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32149620
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vskv:: V takix sluchayax i ispol'zuetsya SQL LOADER.
A zadacha developera - dat' control file.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32149626
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Oracle X-pert:
Не секьюрно, раз.
Требует либо логина владельцом схемы, либо наличия таблицы в схеме batch_task пользователя, что ставит на уши все права доступа, два.
Замучаешься отслеживать ошибки при загрузке (и не прервёшься при обнаружении оной), три.
Ну и, формат файла не просто данные, а данные в "конверте", с check sum и т.п. Как это всё проверишь лоадером, четыре.
...
Рейтинг: 0 / 0
truncate table from sp at oracle
    #32149632
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A UTL_FILE ne ispol'zuetsya?
{ Esli net gelaniya pisat' OS script...}
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / truncate table from sp at oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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