2016-10-26 9 views
0

У меня есть главная таблица с двумя столбцами с именами таблиц и идентификаторами. И у меня есть те таблицы с именами таблиц в моей БД.Как получить имя таблицы из значения столбца в оракуле sql?

Например, я нахожу определенное имя таблицы, выбрав id. И затем я хочу заполнить таблицу этим именем данными. И я хочу сделать это в одном запросе. Как я могу это сделать?

Цель: заполнить данные сразу всеми таблицами, имеющими имена, похожие на значения в столбце имени таблицы из основной таблицы.

Вот как я получаю список таблиц. Вероятно, я должен пройти через него.

select tbl from asp_tbl where asp in (
select id from (
SELECT * FROM DIMENSION WHERE EXTERNALKEY LIKE 'W16%') 
); 

И тогда я попытаюсь объединить данные из других таблиц внутри таблицы, которая должна быть заполнена:

MERGE INTO tbl d 
      USING 
      (SELECT ? nums,  ? names from data_table) s 
      ON(d.product = s.product and d.ga = s.ga and d.metric_id = s.metric_id) 
      WHEN MATCHED THEN UPDATE SET d.names = s.names 
      WHEN NOT MATCHED THEN INSERT (nums, names)values(s.nums,s.names); 

ли я предоставить достаточно информации?

+4

Какие данные вы хотите использовать для заполнения таблиц? Кроме того, вы не можете сделать это в одном выражении, вам нужен динамический SQL. Отправьте пример того, как заполнить таблицу, как только вы найдете в своей таблице таблиц – Aleksej

+0

, которая должна быть заполнена, имеет два столбца: числа и имена. Итак, скажем, я просматриваю список моих таблиц в главной таблице и заполняю их уникальными для каждой из них данными. – Trex87

+2

Пожалуйста, предоставьте надлежащий тестовый пример с небольшим подмножеством вашей проблемы, включая то, где вы находитесь и что вы ожидаете достичь. Это похоже на динамический SQL, но без надлежащего случая трудно предложить решение. –

ответ

1

Насколько я понимаю, вам нужна некоторая хранимая процедура, которая может выполнять таблицу с некоторыми тестовыми данными. Если это так, вы можете написать что-то вроде:

create procedure fulfil_test_data (p_table_name varchar2) is 
begin 

for x IN (select tbl from asp_tbl where asp in (
SELECT table_id FROM DIMENSION WHERE EXTERNALKEY LIKE p_table_name)) loop 

    execute immediate 'insert into '|| x.tbl ||' (nums, names) 
     select level , chr(ascci(''A'') + mod(level,26)) from dual connect by level < 1001'; 
end loop; 

end; 
/

И называют это

begin 
fulfil_test_data('W16%'); 
end; 
/
+0

Большое спасибо, Алекс! Очень полезный ответ – Trex87

Смежные вопросы