|
|
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
Привет всем! Мне нужно выполнить команду 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(???) или что нибудь в этом духе. С уважением, Руфанов Артем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2003, 14:30 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
А execute immediate не помогает? truncate, кстати, самый что ни на есть DDL, а за использование DDL в хранимом коде девелоперов принято вешать за яйца на фонарных столбах, предварительно выпустив кишки тупым кухонным ножом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2003, 14:39 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2003, 14:50 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
а за использование DDL в хранимом коде девелоперов принято вешать за яйца на фонарных столбах, предварительно выпустив кишки тупым кухонным ножом. Ну это ты загнул. Не хочешь не пользуй, а другим не мешай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2003, 21:55 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
А ты видел, _как_ работают таким образом (создание/удаление таблиц/индексов, модификация структуры "на лету" и проч. прелести) написанные относительно крупные системы? Я видел и знаю, что говорю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2003, 08:30 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
truncate table - это конечно не DDL чистом виде, а больше DML. Я думаю тут можно спорить. DBA Oracle вряд-ли конечно будет помещать эту команду в хранимую процедуру, он скорее просто скрипт напишет для SQL*Plus и будет его выполнять по необходимости. А если писать приложение для пользователей, которые не должны иметь непосредственного доступа к БД, в котором включаются подобные административные функции, то это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2003, 09:14 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
Спасибо большое за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2003, 20:41 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
2 Scott:; Scazanno sil'no, dage ochen', no krasivo i verno. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2003, 21:43 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
Scott Tiger > А ты видел, _как_ работают таким образом (создание/удаление > таблиц/индексов, модификация структуры "на лету" и проч. прелести) > написанные относительно крупные системы? Я видел и знаю, что говорю. Думаю, что ответ человек получил, а то что вы видели в других системах - отнешения к делу не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2003, 10:28 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
Дело в том, что человек хотел получить (и, вероятно, получил) ответ на вопрос, возникший вследствие некорректного подхода к проектированию database-части приложения. Я считаю своим долгом предупредить такие вещи и вернуть заблудшего на путь истинный :) Ибо я последнее время связан, в основном, с эксплуатацией различных oracle-based систем, и постоянно встречаю такие и даже худшие "финты" разработчиков, т.е., у меня есть вполне шкурный интерес в том, чтобы приложение было "прямо" написано. А DDL в боевом коде (сервисный не в счёт, там такое допустимо, хотя традиционно такие задачи решаются не хранимым кодом, а пачкой скриптов) - это зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2003, 10:39 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
Человеку нужно было очистить всю таблицу от данных. Стандартно он бы это сделал так: DELETE <tab_name>; Но поскольку мы все знаем, что это не самый лучший способ, тем более для больших таблиц, зачем надо нам делать нагрузку на сегменты отката и редо-логи. Поэтому ипльзуем TRUNCATE TABLE <tab_name>, тем более уменьшая hwm. Мне кажется вопросы DDL в данном топике и не рассматривались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2003, 10:57 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
2Scott DDL в коде бывает жизненно необходим, пример удаление/создание индексов при мощных вставках. Просто сам текс DDL выражения можно хранить в табличках, давая тем самым возможность просмотра и изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2003, 11:13 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
Человеку нужно было очистить всю таблицу от данных Зачем это может потребоваться в боевом коде? Не спорю, truncate работает отлично, но полная очистка таблицы не должна быть частью бизнес-логики. в коде бывает жизненно необходим, пример удаление/создание индексов при мощных вставках Да, это допустимый вариант в некоторых случаях (не 24*7, гарантированное отсутствие конкуренции за модифицированный объект между пользователями, ну и т.д). Опять же, в этом случае ты знаешь, что удаляешь и что создаёшь - это ещё более-менее. А вот когда приложение сотнями в день плодит таблицы с псевдослучайным именем и непредсказуемым размером, индексирует их "по-минимуму", а потом эти таблицы достаточно интенсивно использует для построения тех или иных выборок - это клиника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2003, 11:28 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
Patology.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2003, 11:40 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
2 Scott Tiger: Как представитель этих самых девелоперов , хотел бы рассказать о классическом случае, когда truncate просто необходим: Есть с две системы, териториально разнесённые, причём система первого типа одна на всех, а второго типа (источник данных) обычно в районе десятка. Первой системе для работы необходим набор данных из второй системы. Ввиду некоторых отличий в архитектуре и т.п (см. п1), данные передаются файлом. Иногда размер файла достигает несколько сотен тысяч записей. Так вот, для вчитки этого файла в первую систему используется набор из десятка таблиц, которым перед загрузкой каждого файла делают truncate. Единственное, специальный планировщик + dbms_lock гарантируют, что в системе будет работать только один экземпляр задачи. Итого, схема работает уже несколько лет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2003, 15:44 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
2vskv:: V takix sluchayax i ispol'zuetsya SQL LOADER. A zadacha developera - dat' control file. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2003, 16:36 |
|
||
|
truncate table from sp at oracle
|
|||
|---|---|---|---|
|
#18+
2 Oracle X-pert: Не секьюрно, раз. Требует либо логина владельцом схемы, либо наличия таблицы в схеме batch_task пользователя, что ставит на уши все права доступа, два. Замучаешься отслеживать ошибки при загрузке (и не прервёшься при обнаружении оной), три. Ну и, формат файла не просто данные, а данные в "конверте", с check sum и т.п. Как это всё проверишь лоадером, четыре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2003, 17:05 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32148555&tid=1990802]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 472ms |

| 0 / 0 |
