При загрузке данных с использованием oracle apex я должен искать в другой таблице соответствующий идентификатор и вытаскивать значение столбца

Я создаю приложение с использованием Oracle Apex 4.2. t1
-----------------------
id страна
1 сша
2 оаэ
3 великобритания
В приведенном ниже снимке экрана указан «ИДЕНТИФИКАТОР СУБЪЕКТА», который я должен сравнить с таблицей «t2» и получить данные «ИДЕНТИФИКАТОР ПЕРВИЧНОГО ВЛАДЕЛЬЦА» при загрузке.


 введите описание изображения здесь

t2
------------------------
id country
1   -
2   -
3  uk
4  UNk


на основе таблиц t1 приложение «SUBJECT_ID» должно загружать данные «PRIMARY OWNER QID» при загрузке отчета / формы.

 введите описание изображения здесь

Я уже создал форму, которая фиксирует данные таблицы «t1», но мне нужно создать мастер импорта, чтобы выбрать файл .csv, содержащий данные таблицы «t2».

Я импортировал файл .csv в приложение, используя функцию Oracle по умолчанию «ЗАГРУЗКА ДАННЫХ», но я хочу объединить таблицу «t2» с таблицей «t1», чтобы она выводила следующую таблицу

t3
-------------------
id country
1  USA
2  UAE
3  UK

Спасибо за помощь, друзья.

не могу понять в опции «ЗАГРУЗКА ДАННЫХ». Я прошу дать мне простые шаги, чтобы сделать это при загрузке / во время загрузки страницы.


person user2389346    schedule 01.10.2015    source источник
comment
Отличается ли страна UK от t1 от UNK на t2? или это опечатка?   -  person Cristian_I    schedule 02.10.2015
comment
привет кристиан, да UK из t2 отличается от UNK в t2 с разными идентификаторами   -  person user2389346    schedule 02.10.2015
comment
Какова логика получения t3? Почему у вас нет в t3 записи с id 3 из t1?   -  person Cristian_I    schedule 02.10.2015
comment
извинения за опечатку, Кристиан, необходимо получить значение 'COUNTRY' в таблице 't3' при загрузке файла csv (данные 't2'), совпадающего с 'ID' таблицы t2, он должен вывести значения 't3'   -  person user2389346    schedule 03.10.2015


Ответы (2)


Я бы посоветовал изменить страницу мастера, которая отображает процесс «Проверка данных» для мастера импорта. Тогда ваши пользователи смогут использовать диалог самостоятельно.

Для SQL-запроса вы можете выполнить простой запрос для ваших данных T3:

INSERT INTO T3 (SELECT NVL(T2.ID, T1.ID) AS ID, NVL(T2.COUNTRY, T1.COUNTRY) AS COUNTRY FROM T2 LEFT JOIN T1 ON T1.ID= T2.ID)

Вы можете включить это в процесс или использовать для одноразового преобразования.

person rarspace01    schedule 02.10.2015
comment
Спасибо @ rarspace01 .. Я пробовал приведенный выше код в разделе процесса, но, к сожалению, выдает ошибку, не могу ее обработать. - person user2389346; 02.10.2015
comment
не могли бы вы сообщить нам об ошибке? тогда мы можем исправить это / я могу исправить sql - person rarspace01; 05.10.2015
comment
Спасибо за вопрос @ rarspace01, я вижу приведенную ниже ошибку в окне процесса. Произошла 1 ошибка ORA-06550: строка 2, столбец 13: PL / SQL: ORA-00947: недостаточно значений ORA-06550: строка 2, столбец 1: PL / SQL: инструкция SQL игнорируется. - person user2389346; 05.10.2015
comment
Похоже, у вас другая структура t3, чем описано. Не могли бы вы добавить свой DML (sql create) Skript к вопросу, чтобы мы имели структуру ваших таблиц. Это поможет нам написать для вас подходящий sql-запрос. - person rarspace01; 06.10.2015
comment
спасибо за ответ, я использовал ваш запрос, но немного изменил его, теперь я могу получать значения динамически и обновлять свою таблицу 't3' (т.е. 'apt_mdr_allocation' в приложении) update apt_mdr_allocation set primary_owner_qid = (SELECT primary_owner_qid FROM apt_mdr_subject_owner where subject_id = apt_mdr_allocation.subject_id),secondary_owner_qid = (select secondary_owner_qid from apt_mdr_subject_owner where subject_id = apt_mdr_allocation.subject_id), tertiary_owner_qid = ( select tertiary_owner_qid from apt_mdr_subject_owner where subject_id = apt_mdr_allocation.subject_id); - person user2389346; 06.10.2015
comment
но всякий раз, когда я загружаю файл csv, он вставляет новые строки, что приводит к дублированию, поэтому можете ли вы указать мне, где для каждой загрузки, если он проверяет существующие строки и обновляет их, и если существующие строки отсутствуют в предыдущей таблице, это должен вставить оставшиеся строки. пожалуйста, дайте мне знать, если мне нужно уточнить - person user2389346; 06.10.2015
comment
Если вы используете Oracle 10 ›=, вы можете использовать команду MERGE. MERGE INTO t3 a USING (YOUR SOURCE QUERY) b ON (a.ID = b.ID) WHEN MATCHED THEN UPDATE SET a.primary_owner_qid = b.primary_owner_qid WHEN NOT MATCHED THEN INSERT (id, primary_owner_qid ) VALUES (b.id, b.primary_owner_qid ); - person rarspace01; 07.10.2015
comment
спасибо, я пробовал код выше merge into t3 a using t1 b on (a.subject_id=b.subject_id) when matched then update set a.primary_owner_qid = b. primary_owner_qid when not matched then insert (subject_id,primary_owner_qid) values ( b.subject_id,b.primary_owner_qid);, но все же вижу дубликаты. дайте мне знать, если я ставлю r8. - person user2389346; 07.10.2015
comment
Можете ли вы попробовать: MERGE INTO t3 a USING (SELECT NVL(T2.ID, T1.ID) AS ID, NVL(T2.COUNTRY, T1.COUNTRY) AS COUNTRY FROM T2 LEFT JOIN T1 ON T1.ID= T2.ID)) b ON (a.ID = b.ID) WHEN MATCHED THEN UPDATE SET a.primary_owner_qid = b.primary_owner_qid WHEN NOT MATCHED THEN INSERT (id, primary_owner_qid ) VALUES (b.id, b.primary_owner_qid ); Это более или менее направление - person rarspace01; 08.10.2015
comment
Я пробовал код с моими значениями MERGE INTO apt_mdr_allocation a USING (SELECT NVL(apt_mdr_allocation.subject_id,apt_mdr_subject_owner.subject_id) AS subject_id, NVL(apt_mdr_allocation.primary_owner_qid,apt_mdr_subject_owner.primary_owner_qid) AS primary_owner_qid FROM apt_mdr_allocation LEFT JOIN apt_mdr_subject_owner ON a.subject_id= b.subject_id)) b ON (a.subject_id = b.subject_id) WHEN MATCHED THEN UPDATE SET a.primary_owner_qid = b.primary_owner_qid WHEN NOT MATCHED THEN INSERT (subject_id, primary_owner_qid ) VALUES (b.subject_id, b.primary_owner_qid ); bt я вижу ORA-00969: отсутствует ключевое слово ON - person user2389346; 08.10.2015
comment
просто чтобы прояснить проблему t1 = apt_mdr_subject_owner, t2 = apt_mdr_allocation, t3 = apt_mdr_allocation [во время загрузки данных - я загружаю данные в t3, но нам нужно обновить соответствующие строки t3, пока мы выполняем загрузку снова, он должен вставить новые строки в таблицу t3, если совпадающие строки не найдены. пожалуйста, дайте мне знать, если я понимаю, о чем я спрашиваю rarspace01. Спасибо за поддержку - person user2389346; 08.10.2015
comment
спасибо за поддержку, приятель. Проблема была решена с использованием самой функции загрузки данных oracle apex. нам нужно пропустить уникальные столбцы при настройке функции загрузки данных. Поэтому, когда когда-либо уникальные столбцы совпадают с соответствующими столбцами в файле Excel, он обновляет цель, если она не совпадает, и вставляет новые строки. Надеюсь, это решение поможет и другим ... :) - person user2389346; 09.10.2015

Привет, я не знаю, правильно ли я понял, но попробуйте следующее:

SELECT t2.id as ID, t1.country as COUNTRY FROM t1, t2 WHERE t1.id = t2.id ORDER BY t2.id

Надеюсь это поможет.

person brenners1302    schedule 05.10.2015
comment
Я поместил вышеуказанный оператор выбора в свой оператор вставки, но я вижу ошибку, говорящую о слишком большом количестве значений. Мне нужно разместить код sql на странице проверки данных, где он должен выполняться, пока я выполняю ЗАГРУЗКУ ДАННЫХ с использованием функции oracle по умолчанию. спасибо за твой ответ @ brenners1302 - person user2389346; 05.10.2015