EMPLOYEES
以下に、1 つの行を からにコピーする 2 つの例を示しますEMPLOYEES_COPY
。お役に立てば幸いです。
あなたは使用することができcursors
ますpackages
:
DROP TABLE EMPLOYEES;
/
DROP TABLE EMPLOYEES_COPY;
/
CREATE TABLE EMPLOYEES
(
ID INT,
FIRST_NAME varchar(30),
LAST_NAME varchar(30)
);
insert into EMPLOYEES values(1,'AA','BBB');
insert into EMPLOYEES values(2,'CC','GGG');
insert into EMPLOYEES values(3,'EEE','MMM');
insert into EMPLOYEES values(4,'FFF','ZZZ');
/
CREATE TABLE EMPLOYEES_COPY
(
ID INT,
FIRST_NAME varchar(30),
LAST_NAME varchar(30)
);
/
CREATE OR REPLACE PACKAGE EMPLOYEE as
type t_cursor is ref cursor;
procedure FIND(id_emp int, curEMPLOYEE out t_cursor);
procedure INSERT_COPY(id_emp int);
end EMPLOYEE;
/
CREATE OR REPLACE PACKAGE BODY EMPLOYEE as
---------------------------------------------
procedure FIND(id_emp int,curEMPLOYEE out t_cursor) as
begin
open curEMPLOYEE for SELECT id, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE id= id_emp;
end FIND;
---------------------------------------------
procedure INSERT_COPY(id_emp int) as
cur t_cursor;
emp employees%rowtype;
begin
FIND(id_emp=>id_emp,curEMPLOYEE=>cur);
LOOP
FETCH cur INTO emp;
EXIT WHEN cur%NOTFOUND;
insert into EMPLOYEES_COPY
values(emp.id,emp.FIRST_NAME,emp.LAST_NAME);
END LOOP;
end INSERT_COPY;
end EMPLOYEE;
/
パッケージは、単一のエンティティの機能をグループ化できるため、非常に便利です。例では、従業員に取り組んでいる関数をグループ化しました。
詳細情報
ビューを使用することもできます:
DROP TABLE tempEMPLOYEES;
/
DROP TABLE EMPLOYEES;
/
DROP TABLE EMPLOYEES_COPY;
/
CREATE TABLE EMPLOYEES
(
ID INT,
FIRST_NAME varchar(30),
LAST_NAME varchar(30)
);
insert into EMPLOYEES
values(1,'AA','BBB');
insert into EMPLOYEES
values(2,'CC','GGG');
insert into EMPLOYEES
values(3,'EEE','MMM');
insert into EMPLOYEES
values(4,'FFF','ZZZ');
/
CREATE TABLE EMPLOYEES_COPY
(
ID INT,
FIRST_NAME varchar(30),
LAST_NAME varchar(30)
);
/
CREATE GLOBAL TEMPORARY TABLE tempEMPLOYEES (
ID INT,
FIRST_NAME varchar(30),
LAST_NAME varchar(30)
) ON COMMIT DELETE ROWS;
/
CREATE OR REPLACE PACKAGE EMPLOYEE as
procedure INSERT_COPY(id_emp int);
end EMPLOYEE;
/
CREATE OR REPLACE PACKAGE BODY EMPLOYEE as
---------------------------------------------
procedure COPY_TO_TEMP(id_emp int) as
begin
insert into tempEMPLOYEES
SELECT id, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE id= id_emp;
end COPY_TO_TEMP;
---------------------------------------------
procedure INSERT_COPY(id_emp int) as
begin
COPY_TO_TEMP(id_emp);
insert into EMPLOYEES_COPY
SELECT id, FIRST_NAME, LAST_NAME
FROM tempEMPLOYEES;
--WHERE id= id_emp; <---You can add this If you need.
end INSERT_COPY;
end EMPLOYEE;
/
ビューに関する詳細情報は次のとおりです。
以下を使用して両方の例をテストできます。
DECLARE
ID_EMP NUMBER;
BEGIN
ID_EMP := 4;
EMPLOYEE.INSERT_COPY ( ID_EMP => ID_EMP) ;
commit;
END;