Nano Hash - криптовалюты, майнинг, программирование

Oracle: создать новую строку при обновлении старой строки

Привет, я пытаюсь создать новую строку ниже при обновлении значений старой строки.

У меня есть таблица ниже под названием TestCustomer, я хотел бы обновить существующий статус строки до «I» и создать новую строку с новым email_Id и статусом A, если customer_id совпадает при вставке;

create table TestCustomer(customer_id varchar(18),emai_id varchar(18),email_stat char(1))

Insert Into TestCustomer(customer_id,emai_id,email_stat)values('223459','12345','A');
Insert Into TestCustomer(customer_id,emai_id,email_stat)values('223458','123456','I');
Insert Into TestCustomer(customer_id,emai_id,email_stat)values('223459','123457','A');

Ввод:

customer_id=223459 emai_id='23678'

Вывод:

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

Выход


  • Это сложно сделать с помощью операторов вставки на основе значений. Для достижения этого в идеале вы должны иметь входящие исходные данные в промежуточной таблице или что-то в этом роде. 04.10.2020
  • Я не могу понять, что ты пытаешься сделать. В вашем примере данных, что случилось с customer_id 223458? Что вы подразумеваете под совпадением идентификатора клиента при вставке? Соответствует чему? 04.10.2020
  • Я обновляю новый адрес электронной почты для данного клиента, в данном случае 223459. Таким образом, старый адрес электронной почты, связанный с клиентом, будет неактивным, а новый идентификатор электронной почты будет активным. 05.10.2020

Ответы:


1

Вы можете получить его, используя оператор merge с двумя строками в предложении using: одну для update и вторую для insert:

merge into TestCustomer t
using (
      select
         c,
         223459  as customer_id,
         '23678' as emai_id
      from dual
           ,(select 'A' c from dual union all select 'X' c from dual)
) v
on (v.c='X' and t.customer_id=v.customer_id)
when matched then update
    set email_stat='I'
when not matched then
    insert (customer_id,emai_id,email_stat)
    values(v.customer_id,v.emai_id,v.c)
    where v.c='A';

как видите, строка с «X» используется для обновления, а строки с «A».

Полный пример: https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=4f014283e5eff2e4ccbbfca9b0 а>

04.10.2020
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..