Подтвердить что ты не робот

Вставка значений в таблицы Oracle SQL

Я пытаюсь вставить значения в таблицу "Employee" в Oracle SQL. У меня есть вопрос относительно ввода значений, определяемых внешним ключом:

Мои сотрудники имеют 3 атрибута, которые определяются внешними ключами: State, Position и Manager. Я использую оператор INSERT INTO для вставки значений и ввода данных вручную. Нужно ли мне физически искать каждую ссылку для ввода данных или есть команда, которую я могу использовать? Например.

INSERT INTO Employee 
(emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager)
VALUES 
(001, "John Doe", "1 River Walk, Green Street", 3, 5, 1000)

Это должно заполнить таблицу сотрудников (John Doe, 1 River Walk, Green Street, New York, Sales Executive, Barry Green). Нью-Йорк state_id=3 в таблице State; Исполнительный директор отдела продаж position_id=5 в таблице positions; и Барри Грин - manager_id=1000 в таблице manager.

Есть ли способ ввода текстовых значений ссылочных таблиц, чтобы Oracle распознал текст и сопоставил его с соответствующим идентификатором? Я надеюсь, что этот вопрос будет иметь смысл, будет рад прояснить все.

Спасибо!

4b9b3361

Ответ 1

Вы можете расходовать следующую функцию, чтобы вытащить больше параметров из БД перед вставкой:

--
-- insert_employee  (Function) 
--
CREATE OR REPLACE FUNCTION insert_employee(p_emp_id in number, p_emp_name in varchar2, p_emp_address in varchar2, p_emp_state in varchar2, p_emp_position in varchar2, p_emp_manager in varchar2) 
RETURN VARCHAR2 AS

   p_state_id varchar2(30) := '';
 BEGIN    
      select state_id 
      into   p_state_id
      from states where lower(emp_state) = state_name;

      INSERT INTO Employee (emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager) VALUES 
                (p_emp_id, p_emp_name, p_emp_address, p_state_id, p_emp_position, p_emp_manager);

    return 'SUCCESS';

 EXCEPTION 
   WHEN others THEN
    RETURN 'FAIL';
 END;
/

Ответ 2

INSERT
INTO    Employee 
        (emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager)
SELECT  '001', 'John Doe', '1 River Walk, Green Street', state_id, position_id, manager_id
FROM    dual
JOIN    state s
ON      s.state_name = 'New York'
JOIN    positions p
ON      p.position_name = 'Sales Executive'
JOIN    manager m
ON      m.manager_name = 'Barry Green'

Обратите внимание, что, но одна ошибка орфографии (или дополнительное пространство) приведет к несоответствию и ничего не будет вставлено.

Ответ 3

Вы можете вставить в таблицу из SELECT.

INSERT INTO
  Employee (emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager)
SELECT
  001,
  'John Doe',
  '1 River Walk, Green Street',
  (SELECT id FROM state WHERE name = 'New York'),
  (SELECT id FROM positions WHERE name = 'Sales Executive'),
  (SELECT id FROM manager WHERE name = 'Barry Green')
FROM
  dual

Или, аналогично...

INSERT INTO
  Employee (emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager)
SELECT
  001,
  'John Doe',
  '1 River Walk, Green Street',
  state.id,
  positions.id,
  manager.id
FROM
  state
CROSS JOIN
  positions
CROSS JOIN
  manager
WHERE
      state.name     = 'New York'
  AND positions.name = 'Sales Executive'
  AND manager.name   = 'Barry Green'

Хотя этот факт предполагает, что все поисковые запросы существуют. Если, например, нет названия позиции "Sales Executive", ничто не будет вставлено в эту версию.