powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите решить задачу на pl/sql
21 сообщений из 21, страница 1 из 1
Помогите решить задачу на pl/sql
    #39709421
zemik69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо привести данные в разных входных таблицах в соответсвие с эталонной таблицей.
Для этого нужно вытащить из входных таблиц все данные которые не совпадают с эталоном и занести их в EXCEPTIONS вместе с данными несоответствия (код ошибки, значение из входной таблицы) для дальнейшего разбора ручным либо автоматическим способом.
После каждого разбора производится еще один цикл полного сравнения-сканирования всех данных со входной таблицы.
Если после обработки и рескана входной таблицы ошибка изменилась либо устранена, то данные в EXCEPTIONS следует изменить либо удалить.
Наличие занесенной ошибки в EXCEPTIONS определяется по полям ID_XREF+XREF_TABLE_NAME +ERR_ID+SRC_KEY_VAL.


Необходимо реализовать в виде встроенной процедуры часть процесса связанную со сканированием, сравнением с эталоном и изменение EXCEPTIONS.

В качестве входных параметров процедура должна уметь принимать(для создания динамического query)
1. Имя эталонной таблицы + эталонное поле для сравнения (Пример: PRODUCT_XREF and OUT_OF_PRINT_DATE). Эталонная таблица всегда содержит поле "ID_XREF"
2. Имя входной таблицы + поле для сравнения (Пример: AUTHORS and END_DATE)
3. Join Constraint: ID_XREF либо OBJ_ID (Пример: PRODUCT_XREF.ID_XREF=AUTHORS.ID_XREF)
4. Сравнительный Constraint определяющий совпадение с эталоном (Пример: PRODUCT_XREF.OUT_OF_PRINT_DATE = AUTHORS.END_DATE)
Если Constraint не выполнен, то входные данные не совпадают с эталоном.
Сравнительный Constraint может быть сложным и состоять из нескольких сравнений по нескольким полям.
5. Имя ошибки ERR_NM


Эталонная таблица:
CREATE TABLE "PRODUCT_XREF" (
"ID_XREF" NUMBER(38,0) NOT NULL ENABLE,
"SYSTEM" CHAR(14 CHAR) NOT NULL ENABLE,
"OBJ_ID" NUMBER(38,0),
"END_DATE" DATE,
"OUT_OF_PRINT_DATE" DATE,
"TITLE" VARCHAR2(1000 CHAR)
CONSTRAINT "PRODUCT_XREF_PK" PRIMARY KEY ("ID_XREF")
)

Таблица ошибок:
CREATE TABLE "ERRORS" (
"ERR_ID" NUMBER NOT NULL ENABLE,
"ERR_NM" VARCHAR2(30 CHAR),
CONSTRAINT "ERRORS_PK" PRIMARY KEY ("ERR_ID")
)

Таблица несоответствий :
CREATE TABLE "EXCEPTIONS" (
"ID_XREF" NUMBER,
"XREF_TABLE_NAME" VARCHAR2(30 CHAR),
"SRC_KEY_VAL" VARCHAR2(255 CHAR), -- Значение из входной таблицы
"ERR_ID" NUMBER NOT NULL ENABLE,
"CREATE_DATE" DATE,
CONSTRAINT "EXCEPTIONS_ERR_ID_FK" FOREIGN KEY ("ERR_ID") REFERENCES "ERRORS" ("ERR_ID") ENABLE
)
Фактически уникальный ключ этой таблицы ID_XREF+XREF_TABLE_NAME+ERR_ID


Имя и структуру входной таблицы придумать самостоятельно.
Как примеры:
CREATE TABLE "AUTHORS" (
"ID_XREF" NUMBER(38,0) NOT NULL ENABLE,
"AUTHOR" CHAR(100 CHAR) NOT NULL ENABLE,
"END_DATE" DATE
CONSTRAINT "AUTHORS_PK" PRIMARY KEY ("ID_XREF")
)
CREATE TABLE "OBJTREE" (
"ID" NUMBER(38,0) NOT NULL ENABLE,
"OBJ_ID" NUMBER(38,0),
"SYSTEM" CHAR(14 CHAR) NOT NULL ENABLE,
"TITLE" VARCHAR2(1000 CHAR)
CONSTRAINT "OBJTREE_PK" PRIMARY KEY ("ID")
)
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709440
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала, уважай коллег
Используй оформление, читать невозможно, сравни:
zemik69Необходимо привести данные в разных входных таблицах в соответсвие с эталонной таблицей.
Для этого нужно вытащить из входных таблиц все данные которые не совпадают с эталоном и занести их в EXCEPTIONS вместе с данными несоответствия (код ошибки, значение из входной таблицы) для дальнейшего разбора ручным либо автоматическим способом.
После каждого разбора производится еще один цикл полного сравнения-сканирования всех данных со входной таблицы.
Если после обработки и рескана входной таблицы ошибка изменилась либо устранена, то данные в EXCEPTIONS следует изменить либо удалить.
Наличие занесенной ошибки в EXCEPTIONS определяется по полям ID_XREF+XREF_TABLE_NAME +ERR_ID+SRC_KEY_VAL.


Необходимо реализовать в виде встроенной процедуры часть процесса связанную со сканированием, сравнением с эталоном и изменение EXCEPTIONS.

В качестве входных параметров процедура должна уметь принимать(для создания динамического query)
1. Имя эталонной таблицы + эталонное поле для сравнения (Пример: PRODUCT_XREF and OUT_OF_PRINT_DATE). Эталонная таблица всегда содержит поле "ID_XREF"
2. Имя входной таблицы + поле для сравнения (Пример: AUTHORS and END_DATE)
3. Join Constraint: ID_XREF либо OBJ_ID (Пример: PRODUCT_XREF.ID_XREF=AUTHORS.ID_XREF)
4. Сравнительный Constraint определяющий совпадение с эталоном (Пример: PRODUCT_XREF.OUT_OF_PRINT_DATE = AUTHORS.END_DATE)
Если Constraint не выполнен, то входные данные не совпадают с эталоном.
Сравнительный Constraint может быть сложным и состоять из нескольких сравнений по нескольким полям.
5. Имя ошибки ERR_NM


Эталонная таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE "PRODUCT_XREF" (
                    "ID_XREF" NUMBER(38,0) NOT NULL ENABLE, 
                    "SYSTEM" CHAR(14 CHAR) NOT NULL ENABLE, 
                    "OBJ_ID" NUMBER(38,0), 
                    "END_DATE" DATE, 
                    "OUT_OF_PRINT_DATE" DATE, 
                    "TITLE"      VARCHAR2(1000 CHAR)
                    CONSTRAINT "PRODUCT_XREF_PK" PRIMARY KEY ("ID_XREF")
)



Таблица ошибок:
Код: plsql
1.
2.
3.
4.
5.
CREATE TABLE "ERRORS" (
                    "ERR_ID" NUMBER NOT NULL ENABLE, 
                    "ERR_NM" VARCHAR2(30 CHAR), 
                     CONSTRAINT "ERRORS_PK" PRIMARY KEY ("ERR_ID")
)


Таблица несоответствий :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE "EXCEPTIONS" (
                    "ID_XREF" NUMBER, 
                    "XREF_TABLE_NAME" VARCHAR2(30 CHAR),
                    "SRC_KEY_VAL" VARCHAR2(255 CHAR),  -- Значение из входной таблицы
                    "ERR_ID" NUMBER NOT NULL ENABLE, 
                    "CREATE_DATE" DATE,
                    CONSTRAINT "EXCEPTIONS_ERR_ID_FK" FOREIGN KEY ("ERR_ID") REFERENCES "ERRORS" ("ERR_ID") ENABLE
)


Фактически уникальный ключ этой таблицы ID_XREF+XREF_TABLE_NAME+ERR_ID


Имя и структуру входной таблицы придумать самостоятельно.
Как примеры:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE "AUTHORS" (
                     "ID_XREF" NUMBER(38,0) NOT NULL ENABLE, 
                     "AUTHOR"  CHAR(100 CHAR) NOT NULL ENABLE,
                     "END_DATE" DATE
                     CONSTRAINT "AUTHORS_PK" PRIMARY KEY ("ID_XREF")
)
CREATE TABLE "OBJTREE" (
                    "ID" NUMBER(38,0) NOT NULL ENABLE, 
                    "OBJ_ID" NUMBER(38,0),
                    "SYSTEM" CHAR(14 CHAR) NOT NULL ENABLE,
                    "TITLE"      VARCHAR2(1000 CHAR)
                     CONSTRAINT "OBJTREE_PK" PRIMARY KEY ("ID")
)



1) Прочитай:
Студентам, желающим помощи

2) Покажи тестовые данные, лучше в виде with

3) Покажи, что написал, и что не получается...

p.s. называть таблицу служебным словом "EXCEPTIONS", конечно можно, но можно словить такие грабли, что фиг концы потом найдешь.

чем не угодило использование префикса?
tEXCEPTIONS,t_EXCEPTIONS,tab_EXCEPTIONS
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709461
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejninp.s. называть таблицу служебным словом "EXCEPTIONS"вендора не смущает 1647913
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709475
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejninчем не угодило использование префикса?Префиксы являются следствием навязываемой загнивающим Западом идеологии. Там принято писать префиксы mr., mrs., dr. и т.д., чтобы легче было поддерживать дискриминацию по половому признаку, по образованию и т.п.
Использовать нужно суффиксы!
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709483
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejninчем не угодило использование префикса?
tEXCEPTIONS,t_EXCEPTIONS,tab_EXCEPTIONSЗачем ограничивать такой великолепный подход только именама таблиц.
Имена колонок тоже можно префексировать, напоминая, что речь про колонку.
Гурманы еще добавляют суффикс с именем типа.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create table "TAB_EXCEPTIONS"
(
   "COL_ID_XREF_NUMBER"             number,
   "COL_XREF_TABLE_NAME_VARCHAR2"   varchar2(30 char),
   "COL_SRC_KEY_VAL_VARCHAR2"       varchar2(255 char), -- Значение из входной таблицы
   "COL_ERR_ID_VARCHAR2"            number not null enable,
   "COL_CREATE_DATE"                date
)
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709488
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopГурманы еще добавляют суффикс с именем типа.
Даже не гурманы временами склоняются к подобным стандартам, особенно если работают над крупной системой.
...но полные имена типов - перебор, конечно. Чаще всякие сокращения вроде dt_, n_, s_ и т.п.
Временами реально помогает избегать неявных преобразований и бесконечного шаренья по DDL, что экономит время.
К примеру, подобные фрагменты даже в многостраничном запросе к малознакомым объектам вызывают немедленную реакцию вида " АХТУНГ, неявное преобразование" при code review:
Код: plsql
1.
where t1.n_amount > t2.s_treshold


или
Код: plsql
1.
to_date(dt_start, '...')
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709509
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbms_photoshopГурманы еще добавляют суффикс с именем типа.
Даже не гурманы временами склоняются к подобным стандартам, особенно если работают над крупной системой.
...но полные имена типов - перебор, конечно. Чаще всякие сокращения вроде dt_, n_, s_ и т.п.
Временами реально помогает избегать неявных преобразований и бесконечного шаренья по DDL, что экономит время.
К примеру, подобные фрагменты даже в многостраничном запросе к малознакомым объектам вызывают немедленную реакцию вида " АХТУНГ, неявное преобразование" при code review:
Код: plsql
1.
where t1.n_amount > t2.s_treshold

Секция предикаты в плане позволяет избежать шаренья по DDL в подобных случаях.


andrey_anonymous
Код: plsql
1.
to_date(dt_start, '...')

Как правило модель данных проектирует человек, который чуть более профессионален чем типичный кодер.
И он должен продумывать так, чтоб неявных преобразований было минимум.
В общем случае от креативной личности, которая захочет вызвать to_date, защиты нет.
Ну и с суффиксом date в имени это отдельный случай, поскольку слово помимо типа данных означает просто "дата".


Не далее чем неделю назад была проблема на работе, что отсекалось столетие, после модификации дарования из солнечной страны.
Выглядело это так
Код: plsql
1.
to_date(p_blabla_date,'DD-MON-YYYY') as blabla_date

p_blabla_date - это переменная типа date.


Защита от таких идиотов одна - отсекать их на интервью. Но это отдельный разговор.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709536
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopandrey_anonymousК примеру, подобные фрагменты даже в многостраничном запросе к малознакомым объектам вызывают немедленную реакцию вида " АХТУНГ, неявное преобразование" при code review:
Код: plsql
1.
where t1.n_amount > t2.s_treshold

Секция предикаты в плане позволяет избежать шаренья по DDL в подобных случаях.

Угу. И DDL можно почитать. И еще миллион телодвижений сделать.
А можно просто сразу слать, едва увидев текст.
Даже не подключаясь к БД.

dbms_photoshopandrey_anonymous
Код: plsql
1.
to_date(dt_start, '...')

Как правило модель данных проектирует человек, который чуть более профессионален чем типичный кодер.
И он должен продумывать так, чтоб неявных преобразований было минимум.
Поддерживаю полностью.
И продуманные стандарты именования - немаловажная составная часть этой работы.
...стандарт именования не всегда подразумевает 1:1 префикс-тип данных.
Он может быть и несколько разнообразнее - в частности, удобно иметь индикаторы первичного и внешних ключей, а равно - требования к именованию оных.
Что позволяет, к примеру, отмечать ошибки в предикатах соединения.
Помимо прочего, стандартизованные префиксы (на атрибуты, переменные, параметры) позволяют исключить как класс ошибки разыменования в пакетах.
Разумно стандартизованные наименования объектов БД позволяют не заглядывать лишний раз в словарь.
...в общем и целом, совершенно не разделяю скептицизма/сарказма в отношении стандартов именования.
По данной теме у меня всё.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709670
zemik69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin, здравствуйте! Извините за мое оформление. Пока располагаю только следующей подсказкой:

задачу можно решить одним динамическим SQL на основе например outer join. В нем будут дыры при невыполнении эти дыры собрать запросом оберткой переданных условий соединения, который будет вокруг основного, далее открыть неявный курсор for rec in (запрос обертка from (основной запрос)), далее записывать в exception если такого id_xref нет или же апдейтить если он там имеется. В конце одним delete удалить из exception те записи id_xref которые не попали в курсор.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709702
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Включение мета информации в наименование таблиц/столбцов в целях упрощения жизни недумающих людей не кажется мне разумным решением.
Не говоря уже про усложнение сопровождения, ну вдруг там тип поля "код" необходимо будут со временем поменять со строки на число или наоборот.

Это не касается суфиксов для имен параметров/переменных/integrity constraints/etc и вообще необходимости наличия стандарта как такового.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709719
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbms_photoshopпропущено...
Секция предикаты в плане позволяет избежать шаренья по DDL в подобных случаях.

Угу. И DDL можно почитать. И еще миллион телодвижений сделать.
А можно просто сразу слать, едва увидев текст.
Даже не подключаясь к БД.

dbms_photoshopпропущено...
Как правило модель данных проектирует человек, который чуть более профессионален чем типичный кодер.
И он должен продумывать так, чтоб неявных преобразований было минимум.
Поддерживаю полностью.
И продуманные стандарты именования - немаловажная составная часть этой работы.
...стандарт именования не всегда подразумевает 1:1 префикс-тип данных.
Он может быть и несколько разнообразнее - в частности, удобно иметь индикаторы первичного и внешних ключей, а равно - требования к именованию оных.
Что позволяет, к примеру, отмечать ошибки в предикатах соединения.
Помимо прочего, стандартизованные префиксы (на атрибуты, переменные, параметры) позволяют исключить как класс ошибки разыменования в пакетах.
Разумно стандартизованные наименования объектов БД позволяют не заглядывать лишний раз в словарь.
...в общем и целом, совершенно не разделяю скептицизма/сарказма в отношении стандартов именования.
По данной теме у меня всё.
+1, Поддерживаю полностью

в качестве фонового бонуса - любой стандарт именования ведёт к не _конфликту прикладного творчества с
opaкловыми reserved words, за счет того, что префиксы или суффиксы вносят в имена специфические элементы здорового дебилизма
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709761
zemik69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, все ваши замечания касаемо именования и оформления как могут помочь решить задачу? Если возможно оцените решение, которое я писал выше.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709794
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zemik69Коллеги, все ваши замечания касаемо именования и оформления как могут помочь решить задачу? Если возможно оцените решение, которое я писал выше.

Vadim LejninДля начала, уважай коллег
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709802
zemik69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MadDog, я извинился за оформление.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709821
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От вас пока не видно SQL-код на тему

3) Покажи, что написал, и что не получается...
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709828
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousИ еще миллион телодвижений сделать.Да, еще вспомнил про compilation warnings, которые отлавливают определенные виды implicits.

orawishв качестве фонового бонуса - любой стандарт именования ведёт к не _конфликту прикладного творчества с
opaкловыми reserved words, за счет того, что префиксы или суффиксы вносят в имена специфические элементы здорового дебилизма Для фонового бонуса еще можно в конце каждого имени добавлять $... или это уже будут элементы нездорового дебилизма... упс.

Мне даже стало интеерсно в каких еще языках принято тип делать как часть идентификатора.
https://softwareengineering.stackexchange.com/questions/39771/do-you-prefix-variable-names-with-an-abbreviation-of-the-variable-types-hungar pronounYou verbShould adverbNever verbUse adjectiveHungarian nounNotation, prepositionIt verbMakes collectivenounEverything adverbSo comparativeBloody adjectiveHard infinitiveTo verbReadСимпатично, да.
И главное чуть помогает использовать идентификаторы как building blocks тому, кто совсем не хочет вникать в суть.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709830
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zemik69,

Если задача что-то сравнить из разных таблиц, при этому их имена задаются как параметры на входе, то, возможно
zemik69задачу можно решить одним динамическим SQL на основе например outer joinДерзай. Удачи. Если тебе нужно было одобрение незнакомых людей из интернетов, чтоб начать работать.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709884
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopтип делать как часть идентификатора.
Не совсем так.
Тип - это частный случай.
Общий - т.н. "контракт" - который подсказывает, где и как может использоваться идентификатор.
Появление идентификатора вне подразумеваемого контракта - ахтунг.

...пример с изменением типа данных атрибута - отличный пример, когда стандарты именования работают .
По той простой причине, что смена типа данных требует рефакторинга.
Потому смена типа данных требует смены именования атрибута, что приводит к автомагическому выявлению тех мест кода, которые зависят от.
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39709951
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

А если движок СУБД не поддерживает неявные преобразования, то подход меняется или тип по прежнему будет частью?
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39710001
zemik69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, сколько будет стоить решить эту задачу?
...
Рейтинг: 0 / 0
Помогите решить задачу на pl/sql
    #39710013
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zemik69Коллеги, сколько будет стоить решить эту задачу?
С этим следует идти в "работу", тут оффтопик.
А так - на вскидку порядка 1-2чд уточнением постановки, кодированием и тестированием + 0.1..0.2 FTE на сопровождение в течение периода опытной эксплуатации (включает в себя разные ответы на глупые вопросы и задумчивый взгляд).
Стоимость 1 чд зависит от квалификации и самомнения специалиста :)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите решить задачу на pl/sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]