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

Хранимая процедура для добавления строки в начало списка

Оракул 12с

В настоящее время у меня есть следующие три таблицы: Physician, Patient и Wait_List. Таблица Wait_List представляет собой промежуточную таблицу для хранения пациентов, ожидающих приема у отдельных врачей.

Я хотел бы отслеживать приоритет каждого из этих пациентов не по дате их внесения в список ожидания. Например, если данный врач ожидает 3 пациентов, каждому из этих пациентов присваивается значение 1-3 в поле «Приоритет».

Проблема, с которой я сталкиваюсь, заключается в том, чтобы выяснить, как мне начать писать процедуру для ввода четвертого пациента, у которого должен быть приоритет выше 4, например, приоритет 1. Я понимаю, что процедура потребует каждого из 3 текущих приоритеты пациентов будут снижены в цене.

Любое руководство по этому вопросу будет с благодарностью.

Спасибо,


  • Эта часть не имеет для меня смысла, пожалуйста, уточните/исправьте: введите четвертого пациента, который должен иметь приоритет выше 4, например, приоритет 1 26.02.2016
  • таблица wait_list будет иметь следующие три столбца: ИД врача, ИД пациента, Приоритет. Приоритет будет представлять собой увеличивающееся число, уникальное для каждого экземпляра (PhysicianID, PatientID). В приведенном выше сценарии у нас есть врач, которого ждут 3 пациента. Каждому из этих пациентов был присвоен номер в зависимости от приоритета (1, 2 или 3). Приходит четвертый пациент, и было решено, что этот пациент будет поставлен впереди трех предыдущих пациентов. Таким образом, этот четвертый пациент будет иметь приоритет 1, а предыдущие три пациента будут иметь приоритеты 2, 3 и 4 соответственно. 26.02.2016

Ответы:


1

Эта процедура вставит значения в таблицу wait_list и установит номер приоритета равным единице, если уже есть три пациента, ожидающих этого конкретного врача. Просто отредактируйте имена столбцов и таблиц

  create procedure insertinto_Wait_List(i_patient_name IN Patient.patient_namecolumn%TYPE, i_physician Physician.Physician_column%TYPE)
  IS
  v_max_priority NUMBER;
  BEGIN
  select max(prioritynumber_column) into v_max_priority from Wait_List where Physician_column = i_physician;
  if v_max_priority > 2 THEN
  update Wait_List set prioritynumber_column = prioritynumber_column + 1 where Physician_column = i_physician;
  insert into Wait_List (prioritynumber_column, patient_namecolumn, Physician_column) values (1,i_patient_name, i_physician);
  else
  insert into Wait_List (prioritynumber_column, patient_namecolumn, Physician_column) values (v_max_priority + 1,i_patient_name, i_physician);
  end if;
  end;
26.02.2016
  • Это привело меня туда, куда мне нужно было идти! Спасибо еще раз. 26.02.2016

  • 2

    Могут быть лучшие ответы с использованием расширенного PL/SQL. Но мне приходит на ум использование уникального ограничения. При создании таблицы wait_list добавьте следующее уникальное ограничение для создания инструкции:

    CONSTRAINT priority_unique UNIQUE (prioritynumber_column, Physician_column)
    

    Затем процедура может использовать исключение следующим образом

    CREATE PROCEDURE proc_insert_wait_list(i_priority IN wait_list.prioritynumber_column%TYPE, i_patient_name IN Patient.patient_namecolumn%TYPE, i_physician Physician.Physician_column%TYPE)
    IS
    BEGIN
    INSERT INTO Wait_List (prioritynumber_column, patient_namecolumn, Physician_column) values (i_priority,i_patient_name, i_physician);
    COMMIT;
    EXCEPTION
          WHEN DUP_VAL_ON_INDEX
          THEN
          FOR i IN (SELECT prioritynumber_column, patient_namecolumn, Physician_column
              FROM Wait_List 
              WHERE Physician_column = i_physician 
              AND prioritynumber_column >= i_priority)
          LOOP
          UPDATE Wait_List 
          SET prioritynumber_column = prioritynumber_column + 1;
          END LOOP;
          INSERT INTO Wait_List (prioritynumber_column, patient_namecolumn, Physician_column) values (P_priority,i_patient_name, i_physician);
    END proc_insert_wait_list;
    

    Идея, вы можете установить приоритет, который вы хотите. Но если он столкнется с существующим, RDBMS выдаст исключение DUP_VAL_ON_INDEX. Что вы обрабатываете, нажимая все существующие записи, а затем вставляя приоритет.

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

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

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

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

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

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

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

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