#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. Просто чтобы добавить, это интересное предложение. Это может быть использовано как элегантное решение классической проблемы, из-за которой клиенты покупали каждый продукт , он же реляционное разделение .