CREATE TABLE ballage2 ( X NUMBER(10), Y VARCHAR2(24 CHAR), Z DATE )
/
DECLARE
lStart number := 1 ;
CODE_ARRAY dbms_sql.number_table ;
DESCRIPTION_ARRAY dbms_sql.varchar2_table ;
COMPLETION_ARRAY dbms_sql.date_table ;
BEGIN
CODE_ARRAY(1) := 101 ;
DESCRIPTION_ARRAY(1) := 'WRITING' ;
COMPLETION_ARRAY(1) := TO_DATE('2017/02/27 14:00:00', 'YYYY/MM/DD HH24:MI:SS') ;
CODE_ARRAY(2) := 102 ;
DESCRIPTION_ARRAY(2) := 'PROCESSING' ;
COMPLETION_ARRAY(2) := TO_DATE('2017/03/14 15:30:00', 'YYYY/MM/DD HH24:MI:SS') ;
CODE_ARRAY(3) := 103 ;
DESCRIPTION_ARRAY(3) := 'SEEDING' ;
COMPLETION_ARRAY(3) := TO_DATE('2017/05/08 11:28:01', 'YYYY/MM/DD HH24:MI:SS') ;
CODE_ARRAY(4) := 104 ;
DESCRIPTION_ARRAY(4) := 'TRANSFORMING' ;
COMPLETION_ARRAY(4) := TO_DATE('2018/07/07 17:30:00', 'YYYY/MM/DD HH24:MI:SS') ;
CODE_ARRAY(5) := 105 ;
DESCRIPTION_ARRAY(5) := 'BAWLING' ;
COMPLETION_ARRAY(5) := '' ;
LOOP
BEGIN
FORALL i IN lStart..CODE_ARRAY.COUNT
INSERT INTO ballage2 VALUES (CODE_ARRAY(i), DESCRIPTION_ARRAY(i), COMPLETION_ARRAY(i) ) ;
EXIT ;
EXCEPTION WHEN OTHERS THEN
lStart := lStart + sql%ROWCOUNT + 1 ;
END ;
END LOOP ;
END ;
/
CREATE OR REPLACE PACKAGE PNL_BALLAGE2 IS
type cg$row_type is record
( x ballage2.x%type
, y ballage2.y%type
, z ballage2.z%type
) ;
--------------------------------------------------------------------------------
procedure ins( p_ballage2_rec in cg$row_type ) ;
--------------------------------------------------------------------------------
procedure upd( p_ballage2_rec in cg$row_type ) ;
--------------------------------------------------------------------------------
procedure del( p_ballage2_rec in cg$row_type ) ;
--------------------------------------------------------------------------------
procedure lck( p_ballage2_old_rec in cg$row_type ) ;
--------------------------------------------------------------------------------
function slct( p_x in ballage2.x%type )
return cg$row_type ;
--
cg$tmp_rec cg$row_type ;
--
type t_ballage2_tabtype is table of cg$row_type index by binary_integer ;
end PNL_BALLAGE2 ;
/
CREATE OR REPLACE PACKAGE BODY PNL_BALLAGE2 IS
PROCEDURE ins( p_ballage2_rec in cg$row_type )
IS
BEGIN
INSERT INTO ballage2
( x
, y
, z
)
VALUES
( p_ballage2_rec.x
, NVL ( p_ballage2_rec.y , 'Initiƫle actie' )
, TO_DATE(p_ballage2_rec.z, 'YYYY/MM/DD HH24:MI:SS') )
;
--
END ins ;
--------------------------------------------------------------------------------
PROCEDURE upd( p_ballage2_rec in cg$row_type )
IS
BEGIN
UPDATE ballage2
SET y = p_ballage2_rec.y
, z = p_ballage2_rec.z
WHERE x = p_ballage2_rec.x
;
--
END upd ;
--------------------------------------------------------------------------------
PROCEDURE del( p_ballage2_rec in cg$row_type )
IS
BEGIN
DELETE FROM ballage2
WHERE x = p_ballage2_rec.x
AND y = p_ballage2_rec.y
AND z = p_ballage2_rec.z
;
--
END del ;
--------------------------------------------------------------------------------
PROCEDURE lck( p_ballage2_old_rec in cg$row_type )
IS
BEGIN
SELECT x
, y
, z
INTO cg$tmp_rec.x
, cg$tmp_rec.y
, cg$tmp_rec.z
FROM ballage2
WHERE x = p_ballage2_old_rec.x
AND y = p_ballage2_old_rec.y
AND z = p_ballage2_old_rec.z
FOR UPDATE
;
--
END lck ;
--------------------------------------------------------------------------------
FUNCTION slct(p_x in ballage2.x%type)
RETURN cg$row_type
IS
r_ballage2_rec cg$row_type DEFAULT NULL;
BEGIN
SELECT x
, y
, z
INTO r_ballage2_rec.x
, r_ballage2_rec.y
, r_ballage2_rec.z
FROM ballage2
WHERE x = p_x
;
--
RETURN r_ballage2_rec ;
--
END slct;
END PNL_BALLAGE2;
/
DECLARE
my_data ballage2%rowtype;
BEGIN
my_data.x := 106;
my_data.y := 'JACKING';
my_data.z := TO_DATE('2017/06/19 15:00:01', 'YYYY/MM/DD HH24:MI:SS');
pnl_ballage2.ins( my_data );
END;
/
DECLARE
CURSOR my_data_cur
IS
SELECT x, y, z
FROM ballage2
WHERE x=102;
my_data my_data_cur%ROWTYPE;
BEGIN
OPEN my_data_cur;
FETCH my_data_cur INTO my_data;
my_data.y := 'altered via upd';
CLOSE my_data_cur;
commit;
pnl_ballage2.upd( my_data );
END;
/
DECLARE
my_data ballage2%ROWTYPE;
BEGIN
SELECT *
INTO my_data
FROM ballage2
WHERE x = 102;
my_data.y := 'altered again via upd';
pnl_ballage2.upd( my_data );
END;
/
DECLARE
my_data ballage2%ROWTYPE;
BEGIN
SELECT *
INTO my_data
FROM ballage2
WHERE x = 103;
pnl_ballage2.del( my_data );
END;
/
DECLARE
my_data ballage2%ROWTYPE;
p1 varchar2(16);
BEGIN
SELECT *
INTO my_data
FROM ballage2
WHERE x = 102;
pnl_ballage2.lck( my_data );
my_data.y := 'altered using lck';
dbms_lock.sleep(20);
pnl_ballage2.upd( my_data );
commit;
END;
/
DECLARE
v_ret ballage2%ROWTYPE;
BEGIN
v_ret:=pnl_ballage2.slct(104);
DBMS_OUTPUT.PUT_LINE(v_ret.x||', '||v_ret.y||', '||v_ret.z);
END;
/