У меня есть таблица Excel с двумя столбцами данных.Столбец A - это коды, столбец B - соответствующие названия стран.Я превратил его в ассоциативный массив, ueln_country
.
Теперь задача состоит в том, чтобы обновить HORSE
столбец таблицы COUNTRY_OF_RESIDENCE
.У лошадей есть столбец UELN
, где первые три буквы соответствуют кодам в таблице Excel.
Я должен проверить, существует ли код в таблице Excel.Если это произойдет, я должен обновить HORSE.country_of_residence
с CLASSIFICATOR.code
, где CLASSIFICATOR.name = **the corresponding country in column B** and
CLASSIFICATOR.dom_code = 'ISOCODE'`.
Первая попытка выдает ошибку
PLS-00201: идентификатор 'UELN' должен быть объявлен
Как я понял, это потому, что я могу использовать только объявленные переменные в инструкции PL / SQL.
declare
type TBL_UELN_COUNTRY is table of varchar2(50) index by varchar2 (3);
test TBL_UELN_COUNTRY;
ueln_country TBL_UELN_COUNTRY;
begin
ueln_country('008') := 'ALBAANIA';
ueln_country('010') := 'ANTARKTIS';
ueln_country('011') := 'ANTARKTIS';
....
update HORSE
set COUNTRY_OF_RESIDENCE=
when (...dummy_case...) then
(select code from meta.classifcator
where dom_code = 'ISOCODE'
and name = ueln_country(substr(UELN, 1, 3)))
where UELN is not null;
end;
/
Вторая попытка.
Итак, из-за первой ошибки я попытался как-то объявить переменные.
Я знал, что это не сработает (ORA-01422: точная выборка возвращает больше, чем запрошенное количество строк), но сделал эточтобы показать, куда движется моя идея:
declare
type TBL_UELN_COUNTRY is table of varchar2(50) index by varchar2 (3);
test TBL_UELN_COUNTRY;
ueln_country TBL_UELN_COUNTRY;
v_ueln horse.UELN%TYPE;
begin
select UELN into v_ueln from HORSE;
ueln_country('008') := 'ALBAANIA';
ueln_country('010') := 'ANTARKTIS';
ueln_country('011') := 'ANTARKTIS';
....
update HORSE
set COUNTRY_OF_RESIDENCE=
when (...dummy_case...) then
(select code from meta.classifcator
where dom_code = 'ISOCODE'
and name = ueln_country(substr(v_ueln, 1, 3)))
where UELN is not null;
end;
/
Итак, я хочу выбрать значение из ассоциативного массива, где ключ = substr(specific_horse.UELN, 1, 3)
.
Поиск в Google и Stack в течение нескольких часов и нене могу найти ответ.
Уродливое и очень медленное рабочее решение было именно тем, где я не создал ассоциативный массив и сделал 400+ случаев для каждой строки таблицы Excel в форме, подобной when -key- then select code from meta.classificator where dom_code = 'ISOKOOD' and name = -value-