русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

II.4.1. Команды DML insert, update, delete


Дата добавления: 2015-07-09; просмотров: 760; Нарушение авторских прав


Q4_1 Включение в таблицу одной строки

demo@10g> Insert into department (department_id,name,location_id)

values(77,'Teaching',null);

1 строка создана.

 

Напомним здесь, что при создании таблицы DEPARTMENT столбец location_id был объявлен foreign key с допущением null значений. Если бы вставляли новую строку в таблицу EMPLOYEE, мы не смогли бы вставить ее с null значением в столбце внешнего ключа department_id, так как при создании таблицы EMPLOYEE столбцу department_id было задано ограничение not null.

Вернем таблицу DEPARTMENT к прежнему состоянию:

demo@10g> rollback;

Откат завершен.

 

Повторим предыдущую команду немного в другом варианте:

demo@10g> Insert into department values(77,'Teaching',null);

1 строка создана.

 

Если вставляются все столбцы, указывать после названия таблицы столбцы необязательно.

 

Повторим откат:

demo@10g> rollback;

Откат завершен.

 

Выполним вставку только в отдельные столбцы:

demo@10g> Insert into department(department_id,name) values(77,'Teaching');

1 строка создана.

 

При вставке не всех столбцов их названия надо приводить после названия таблицы.

Повторим откат:

demo@10g> rollback;

Откат завершен.

 

Рассмотрим варианты вставки даты. Приведем структуру таблицы SALES_ORDER:

demo@10g> desc sales_order

Имя Пусто? Тип

------------------------- -------- -------------

ORDER_ID NOT NULL NUMBER(4)

ORDER_DATE DATE

CUSTOMER_ID NUMBER(6)

SHIP_DATE DATE

TOTAL NUMBER(8,2)

 

Посмотрим формат и language даты в нашем сеансе (см. раздел II.3.2):

demo@10g> select * from nls_session_parameters

where parameter in ('NLS_LANGUAGE','NLS_DATE_FORMAT');

В соответствии с этим форматом и выполним вставку:

demo@10g> insert into sales_order values(900,'21.07.89',208,'23.07.89',2345);



1 строка создана.

 

Выполним откат:

demo@10g> rollback;

Откат завершен.

 

Воспользуемся при вставке даты функцией to_date():

demo@10g> insert into sales_order

values(900,to_date('21.07.89'),208,to_date('23.07.89'),2345);

1 строка создана.

demo@10g> rollback;

Откат завершен.

А теперь вставим дату в другом формате:

demo@10g> insert into sales_order(order_id,order_date,customer_id,ship_date,total)

values(900,to_date('21-jul-1989', 'dd-mon-yyyy','nls_date_language=american'),

208,to_date('23-jul-1989', 'dd-mon-yyyy','nls_date_language=american'),2345);

1 строка создана.

Отметим, что вставленная строка извлекает дату в формате сеанса:

 

demo@10g> rollback;

Откат завершен.

demo@10g> select * from sales_order where order_id=900;

 

ORDER_ID ORDER_DA CUSTOMER_ID SHIP_DAT TOTAL

---------- -------- ----------- -------- ----------

900 21.07.89 208 23.07.89 2345

 

 

Q4_2 Создание последовательности

demo@10g> create sequence DEPARTMENTseq start with 60;

Последовательность создана.

 

Q4_3 Используем последовательность для генерации значений столбца department_id:

demo@10g> insert into department values(departmentseq.nextval,'training',122);

1 строка создана.

demo@10g> select * from department where name='training';

DEPARTMENT_ID NAME LOCATION_ID

------------- -------------- -----------

61 training 122

demo@10g> rollback;

Откат завершен.

 

Q4_4 Для вставки копированием с использованием запроса создадим таблицу S_GRADE, которая не будет иметь столбец – PRIMARY KEY:

demo@10g>create table S_GRADE as select * from SALARY_GRADE;

demo@10g>select * from S_GRADE;

demo@10g> insert into s_grade (select * from S_GRADE);

demo@10g>select * from S_GRADE;

При наличии столбца – primary key Oracle не допустил бы вставку повторяющихся по primary key строк. Теперь удалим созданную таблицу S_GRADE:

demo@10g> drop table S_GRADE;

Таблица удалена.

 

Q4_5 Вставка одной строки с использованием запроса:

demo@10g> insert into (select * from DEPARTMENT)

values(90,'teaching',122);

1 строка создана.

demo@10g> rollback;

Откат завершен.

 

Q4_6 Иногда требуется обеспечить ввод определенных значений столбца, не допуская другие значения для ввода. Такой ввод возможен с использованием WITH CHECK OPTION

demo@10g> insert into (select * from DEPARTMENT

where location_id = 122 with check option)

values(90,'teaching',50);

insert into (select * from DEPARTMENT

*

ошибка в строке 1:

ORA-01402: представление WITH CHECK OPTION не соответствует фразе WHERE

Ошибка зарегистрирована, так как в опции with check option указано допустимое для ввода значение location_id = 122, а вводимое значение 50.

 

demo@10g> insert into (select * from DEPARTMENT

where location_id = 122 with check option)

values(90,'teaching',122);

1 строка создана.

demo@10g> rollback;

Откат завершен.

 

Q4_7 Изменение строк таблицы командой UPDATE

Создадим еще раз таблицу S_GRADE

demo@10g>create table S_GRADE as select * from SALARY_GRADE;

Таблица создана.

 

demo@10g>select * from S_GRADE;

 

 

Изменим в таблице S_GRADE значений столбца lower_bound, установив в этом столбце значения из столбца upper_bound таблицы SALARY_GRADE

demo@10g> update S_GRADE set lower_bound=(select upper_bound from

SALARY_GRADE sg where sg.grade_id=S_GRADE.grade_id);

5 строк обновлено.

demo@10g>select * from S_GRADE;

 

demo@10g> rollback;

Откат завершен.

 

Q4_8 Выполним простое изменение строки таблицы DEPARTMENT

demo@10g> update DEPARTMENT

set name='TEACHING' where department_id=12;

1 строка обновлена.

demo@10g> rollback;

Откат завершен.

 

Q4_9 Изменить таблицу EMPLOYEE - перевести служащих в должности «CLERK» на должность «SALESPERSON» и при этом установить им 75% средних зарплаты и коммерческих сотрудников, уже работавших в должности «SALESPERSON»

 

demo@10g> update EMPLOYEE e set job_id = (select job_id from job where function =

'SALESPERSON'), (salary,commission)= (select round(0.75*avg(salary),0),

round(0.75*avg(commission),0) from EMPLOYEE where job_id= (select job_id from job

where function='SALESPERSON'))

where job_id = (select job_id from job where function ='CLERK');

 

demo@10g> rollback;

Откат завершен.

 

Q4_10 Удаление строк из таблицы командой DELETE. Удаление сведений обо всех отделах, расположенных в BOSTON-е

demo@10g> Delete from DEPARTMENT where location_id=

(select location_id from location where regional_group='BOSTON');

 

demo@10g> rollback;

Откат завершен.

 

Q4_11 Удаление из таблицы DEPARTMENT ведений об отделах, в которых нет сотрудников

 

demo@10g> delete from DEPARTMENT x

where not exists (select 1 from EMPLOYEE where

DEPARTMENT_ID=x.DEPARTMENT_ID);

 

demo@10g> rollback;

Откат завершен.

 

Q4_12 Удалим дубликаты записей из таблицы S_GRADE, предварительно создав их.

 

demo@10g>insert into S_GRADE (select* from S_GRADE);

 

demo@10g> select rowid,S_GRADE.* from S_GRADE;

 

 

demo@10g> delete from S_GRADE x

where rowid > (select min(rowid)

from S_GRADE y

where x.grade_id=y.grade_id);

 

 



<== предыдущая лекция | следующая лекция ==>
II.3.5. Агрегатные и аналитические функции | II.4.2. Обработка транзакций


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.205 сек.