Написать процедуру копирования всех строк из таблицы kk_smpl в таблицу kk_smpl_copy (такой же структуры).
Параметр процедуры – do_commit. Если do_commit = 0, то не коммитить, если do_commit = 1, то коммитить.
Поясню, что такое commit. Пока в сессии не сделан commit, произведенные изменения данных видны только в рамках этой сессии. Когда сделан commit, изменения посылаются на сервер и становятся видны во всех сессиях.
Командой, обратной команде commit, т.е. командой отката данных, является rollback.
Любая DDL-команда (команда изменения структуры данных) делает commit автоматически.
Создаем таблицы:
CREATE TABLE KK_SMPL
(
ID INTEGER,
DT DATE,
AMOUNT NUMBER(16, 2),
FULLNAME VARCHAR2(50),
PASSPORT CHAR(11)
);
insert into kk_smpl
(id, dt, amount, fullname, passport)
values
(1, sysdate, 34.7, 'Иванов', '2704 871905');
commit;
CREATE TABLE KK_SMPL_COPY
(
ID INTEGER,
DT DATE,
AMOUNT NUMBER(16, 2),
FULLNAME VARCHAR2(50),
PASSPORT CHAR(11)
);
Создаем процедуру копирования:
create or replace procedure kk_copy(do_commit in integer := 0) is
begin
insert into kk_smpl_copy
(id, dt, amount, fullname, passport)
select id, dt, amount, fullname, passport from kk_smpl;
if do_commit = 1 then
commit;
end if;
end kk_copy;
Вызываем процедуру копирования:
begin
kk_copy(1);
end;
Проверим результат:
select * from kk_smpl_copy;
Задача. Простановка count в цикле.
Есть таблица KK_STUDENTS с именами студентов. 3 Алексея, 2 Ивана, остальных по одному.