Процедура PLSQL с forloop и содержит проверку - PullRequest
0 голосов
/ 14 января 2019

То, что я пытаюсь сделать, это: реализовать пользовательскую процедуру слияния для 2 сигналов в сигнал результата.

Начните с rs = s2. Скопируйте все пользовательские поля из SIGNAL1 в RESULTSIGNAL, которых нет в SIGNAL2 (т. Е. Нет настраиваемого поля с таким же идентификатором).

"custom_fields" в SIGNAL_STRUCT - это тип custom_fields_table

Моя процедура выглядит так

 PROCEDURE signal_merge(s1 IN SIGNAL_STRUCT, s2 IN SIGNAL_STRUCT, rs OUT SIGNAL_STRUCT)

Мой псевдокод для достижения этой цели:

for custom_field : s1.custom_fields
    if(custom_field.cf_id  NOT CONTAINS IN s2.custom_fields)
       rs.custom_fields  ADD s1.custom_field

Я не могу найти правильный синтаксис для него. Может кто-нибудь показать мне, как я могу это реализовать?

Обновление: по запросу в комментариях

create or replace TYPE SIGNAL_STRUCT AS OBJECT
id                        NUMBER (38),
emission_type             NUMBER(19),
custom_fields             custom_fields_table


create or replace TYPE custom_fields_struct FORCE
AS
OBJECT
(
field_id VARCHAR2 (128 CHAR),
field_value NUMBER (1)) FINAL ;

create or replace TYPE custom_fields_table FORCE
IS
  TABLE OF wf_bool_custom_fields_struct ;

Обновление: пример S1 имеет настраиваемые поля

  • "f1"
  • "f2"

S2 имеет настраиваемые поля

  • "f3"
  • "f4"

Первый шаг: rs = s2 Второй шаг: запустить слияние

Результат: Таблица пользовательских полей сигнала результата (rs) должна быть после слияния

  • "f1"
  • "f2"
  • "f3"
  • "f4"
...