Создание таблицы из представления — различия между версиями

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
 
Строка 4: Строка 4:
 
==Пример==
 
==Пример==
 
<pre>
 
<pre>
select * from updpr_view2table('vw_warebaseparts','warebaseparts');
+
select * from pr_view2table('vw_warebaseparts','warebaseparts');
 
</pre>
 
</pre>
  
Строка 11: Строка 11:
 
SET TERM ^ ;
 
SET TERM ^ ;
  
create or alter procedure UPDPR_VIEW2TABLE (
+
create or alter procedure PR_VIEW2TABLE (
 
     VIEW_NAME DM_TEXT not null,
 
     VIEW_NAME DM_TEXT not null,
 
     TABLE_NAME DM_TEXT not null)
 
     TABLE_NAME DM_TEXT not null)
Строка 42: Строка 42:
 
/* Existing privileges on this procedure */
 
/* Existing privileges on this procedure */
  
GRANT EXECUTE ON PROCEDURE UPDPR_VIEW2TABLE TO SYSDBA;
+
GRANT EXECUTE ON PROCEDURE PR_VIEW2TABLE TO SYSDBA;
 
</pre>
 
</pre>

Текущая версия на 16:25, 7 марта 2016

Описание

Процедура помогает сделать из представления таблицу с той же самой структурой.

Пример

select * from pr_view2table('vw_warebaseparts','warebaseparts');

Установка

SET TERM ^ ;

create or alter procedure PR_VIEW2TABLE (
    VIEW_NAME DM_TEXT not null,
    TABLE_NAME DM_TEXT not null)
returns (
    TEXT DM_TEXT_BIG)
as
declare variable FIELD_NAME DM_TEXT;
declare variable FIELD_SOURCE DM_TEXT;
declare variable VARS DM_TEXT_BIG;
begin

select 'CREATE TABLE ' || :table_name || ' (' from rdb$database into :text;

select list(rf.rdb$field_name || ' ' || rf.rdb$field_source, ',')
from (
  select * from rdb$relation_fields rrf
  where 1=1
  and rrf.rdb$relation_name=upper(:view_name)
  order by rrf.rdb$field_position asc
) rf
into :vars;

text = text || vars || ');';

  suspend;
end^

SET TERM ; ^

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE PR_VIEW2TABLE TO SYSDBA;