Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как узнать имя таблицы ... ?  [new]
Чеснок
Member

Откуда:
Сообщений: 5
delete from XXX;
dbms_output.put_line('Из таблицы XXX' || ' удалено записей: ' || sql%rowcount);

Подскажите, как вывести имя таблицы над которой только что производилась операция delete/insert/update, не задавая ее имя явно в литералах?
11 дек 06, 16:39    [3520010]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Никак
11 дек 06, 16:43    [3520044]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116282
Вообще то с помощью динамического SQL с первоначальным занесением имени
таблицы в переменную и выполнения EXECUTE IMMEDIATE , а затем
dbms_output.put_line .

Но если это нужно только для вывода, то овчинка выделки не стОит.
Пишите как писали. Вы же все равно знаете имя таблицы.
11 дек 06, 16:46    [3520070]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
Просто
Member [заблокирован]

Откуда: Москва
Сообщений: 4168
Чеснок
delete from XXX;
dbms_output.put_line('Из таблицы XXX' || ' удалено записей: ' || sql%rowcount);

Подскажите, как вывести имя таблицы над которой только что производилась операция delete/insert/update, не задавая ее имя явно в литералах?


  declare
    s varchar2(4000);
  begin
    for i in (select table_name from user_tables)
    loop
      s:='delete from '||i.table_name;
      begin
        execute immediate s;
        dbms_output.put_line('Из таблицы '|| i.table_name || ' удалено записей: ' || sql%rowcount);
      exception
        when others then
          dbms_output.put_line('Ошибка при удалении записей из таблицы '|| i.table_name ||':'||chr(10)||sqlerrm);
      end;
    end loop;
  end;
11 дек 06, 16:52    [3520110]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Просто
Чеснок
delete from XXX;
dbms_output.put_line('Из таблицы XXX' || ' удалено записей: ' || sql%rowcount);

Подскажите, как вывести имя таблицы над которой только что производилась операция delete/insert/update, не задавая ее имя явно в литералах?


  declare
    s varchar2(4000);
  begin
    for i in (select table_name from user_tables)
    loop
      s:='delete from '||i.table_name;
      begin
        execute immediate s;
        dbms_output.put_line('Из таблицы '|| i.table_name || ' удалено записей: ' || sql%rowcount);
      exception
        when others then
          dbms_output.put_line('Ошибка при удалении записей из таблицы '|| i.table_name ||':'||chr(10)||sqlerrm);
      end;
    end loop;
  end;

Брали бы уже all_tables, чего мелочиться-то .
11 дек 06, 17:00    [3520150]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
create table mumu as select * from tab where rownum<11;

declare
  type rowid_tb_tp is table of rowid;
  ar1 rowid_tb_tp;
  function fa_obj_name (p_obj_id number) return varchar2 is
  begin
    for c1 in (select * from all_objects where object_id = p_obj_id) loop
      return c1.owner||'.'||c1.object_name;
    end loop;
    return null;
  end;
begin
  delete from scott.mumu returning rowid bulk collect into ar1;
  dbms_output.put_line('Из таблицы '||fa_obj_name(dbms_rowid.rowid_object(ar1(1)))|| ' удалено записей: ' || sql%rowcount);
end;

Из таблицы SCOTT.MUMU удалено записей: 10
11 дек 06, 18:15    [3520690]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116282
orawish
create table mumu as select * from tab where rownum<11;

declare
  type rowid_tb_tp is table of rowid;
  ar1 rowid_tb_tp;
  function fa_obj_name (p_obj_id number) return varchar2 is
  begin
    for c1 in (select * from all_objects where object_id = p_obj_id) loop
      return c1.owner||'.'||c1.object_name;
    end loop;
    return null;
  end;
begin
  delete from scott.mumu returning rowid bulk collect into ar1;
  dbms_output.put_line('Из таблицы '||fa_obj_name(dbms_rowid.rowid_object(ar1(1)))|| ' удалено записей: ' || sql%rowcount);
end;

 Из таблицы SCOTT.MUMU удалено записей: 10


2orawish. Извините , но невольно вспоминается
анекдот "И тут я таки снова вышел на Дерибасовскую"
11 дек 06, 18:22    [3520725]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
dmidek
..
2orawish. Извините , но невольно вспоминается
анекдот "И тут я таки снова вышел на Дерибасовскую"

ок..
create table mumu as select * from tab where rownum<11;
create view mumu_bla as select * from mumu;
create synonym syn_bla_bla for mumu_bla;

declare
  type rowid_tb_tp is table of rowid;
  ar1 rowid_tb_tp;
  function fa_obj_name (p_obj_id number) return varchar2 is
  begin
    for c1 in (select * from all_objects where object_id = p_obj_id) loop
      return c1.owner||'.'||c1.object_name;
    end loop;
    return null;
  end;
begin
  delete from syn_bla_bla returning rowid bulk collect into ar1;
  dbms_output.put_line('Из таблицы '||fa_obj_name(dbms_rowid.rowid_object(ar1(1)))|| ' удалено записей: ' || sql%rowcount);
end;

Из таблицы SCOTT.MUMU удалено записей: 10
11 дек 06, 18:32    [3520772]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116282
orawish
dmidek
..
2orawish. Извините , но невольно вспоминается
анекдот "И тут я таки снова вышел на Дерибасовскую"

ок..
begin
  delete from syn_bla_bla returning rowid bulk collect into ar1;
  dbms_output.put_line('Из таблицы '||fa_obj_name(dbms_rowid.rowid_object(ar1(1)))|| ' удалено записей: ' || sql%rowcount);
end;

Из таблицы SCOTT.MUMU удалено записей: 10


Да. В таком практическом ключе очень симпатично...
11 дек 06, 18:36    [3520783]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
dmidek
..Да. В таком практическом ключе очень симпатично...

имхо, при некоторой маразматичности конструкции ;)
она еще:
1) отказостойкая (к копированию кода:) получается
2) никакого динамикэскуэля не требует
11 дек 06, 18:50    [3520846]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать имя таблицы ... ?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116282
orawish
dmidek
..Да. В таком практическом ключе очень симпатично...

имхо, при некоторой маразматичности конструкции ;)
она еще:
1) отказостойкая (к копированию кода:) получается
2) никакого динамикэскуэля не требует

Я полностью согласен. Просто при использовании dbms_rowid.rowid_object
очень часто змея кусает себя за хвост - мы ищем имя таблицы, на основании данных,
лежащей в этой же таблице - ergo мы знаем ее имя :-)
Ваш пример с синонимом показывает именно практическое использование этой конструкции.
11 дек 06, 18:57    [3520869]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить