Вставка В таблицу со столбцом типа данных типа VARRAY из инструкции SELECT

#oracle #plsql

#Oracle #plsql

Вопрос:

ТИП emp_varray_typ создан, как показано ниже:

 CREATE TYPE emp_varray_typ AS VARRAY(50) OF VARCHAR2(25);
  

Таблица DEPT_ARRAY создана как
CREATE TABLE dept (НОМЕР DEPT_NO, EMP_NM_ARRAY emp_varray_typ);

Таблица СОТРУДНИКОВ, как показано ниже:

 **DEPT_NO | EMP_NM**
  10      | Scot
  10      | Tiger
  10      | John
  20      | Cindy
  20      | Rock
  

Хотите вставить данные из EMPLOYEE таблицы в DEPT_ARRAY таблицу в виде 2 записей ( EMP_NM в виде массива EMP_NM_ARRAY ), например

 **DEPT_NO | EMP_NM_ARRAY**
10      | {Scot, Tiger, John}
20      | {Cindy, Rock}
  

Есть ли способ вставить с помощью инструкции SQL?

Ответ №1:

Вы можете использовать collect агрегатную функцию и привести к amp_varray_typ :

 create type emp_varray_typ as varray(50) of varchar2(25);

create table dept (dept_no number, emp_nm_array emp_varray_typ);

create table employee (dept_no, emp_nm) as
select 10, 'Scot' from dual union all
select 10, 'Tiger' from dual union all
select 10, 'John' from dual union all
select 20, 'Cindy' from dual union all
select 20, 'Rock' from dual;
  
 insert into dept (dept_no, emp_nm_array)
select dept_no, cast(collect(emp_nm) as emp_varray_typ)
from   employee
group by dept_no;
  

Дополнительная информация: www.oracle-developer.net/display.php?id=306

Комментарии:

1. Теперь нам удалось «собрать» несколько значений для DEPTNO в один столбец. Возможно ли выполнить сравнение этих столбцов с использованием операторов SQL? Пример: emp_nm_array для Deptno 10 имеет значения {Scot, Tiger, John} emp_nm_array для Deptno 20 имеет значения {Scot, Tiger} Нам нужно выяснить, присутствует ли emp_nm_array для Deptno 20 в emp_nm_array для Deptno 10.

2. Это должно работать с типом коллекции вложенной таблицы ( type x is table of y ) и выражением submultiset . Переменные не поддерживают это.

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