0% found this document useful (0 votes)
118 views

Oracle Procedure

This document contains definitions for several Oracle PL/SQL functions and procedures: 1) GIVE_SHIFT returns a shift number (1-3) based on a date and time mode by comparing the hour and minute of the date to different thresholds. 2) ISSOLD checks if a product with a given code and serial number has been sold by querying a database table and returning strings indicating if it was sold or not. 3) TFF returns data from a database table for products between two dates. 4) CK_IFSOLD is a procedure that checks database tables to determine if a product has been sold, repacked, or inserted normally and updates status fields accordingly. 5

Uploaded by

Haiducu Albastru
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
118 views

Oracle Procedure

This document contains definitions for several Oracle PL/SQL functions and procedures: 1) GIVE_SHIFT returns a shift number (1-3) based on a date and time mode by comparing the hour and minute of the date to different thresholds. 2) ISSOLD checks if a product with a given code and serial number has been sold by querying a database table and returning strings indicating if it was sold or not. 3) TFF returns data from a database table for products between two dates. 4) CK_IFSOLD is a procedure that checks database tables to determine if a product has been sold, repacked, or inserted normally and updates status fields accordingly. 5

Uploaded by

Haiducu Albastru
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 27

create or replace

FUNCTION GIVE_SHIFT(MY_DATE DATE,TIMEMODE VARCHAR2) RETURN NUMBER AS


/*MY_DATE should be already added + offset (450 minutes)*/
MYRET NUMBER:=0;
MY_HOUR NUMBER:=0;
MY_MINUTE NUMBER:=0;
MY_LIMITS_MINUTE NUMBER:=0;
BEGIN
IF (TIMEMODE='ARCTIC') THEN
MY_LIMITS_MINUTE:=510;
ELSE
MY_LIMITS_MINUTE:=960;
END IF;
SELECT TO_NUMBER(TO_CHAR(MY_DATE,'HH24')) INTO MY_HOUR FROM DUAL;
SELECT TO_NUMBER(TO_CHAR(MY_DATE,'MI')) INTO MY_MINUTE FROM DUAL;
IF ((MY_HOUR*60)+MY_MINUTE)>=0 AND ((MY_HOUR*60)+MY_MINUTE) < MY_LIMITS_MINUT
E THEN
MYRET:=1;
ELSIF ((MY_HOUR*60)+MY_MINUTE)>= MY_LIMITS_MINUTE AND ((MY_HOUR*60)+MY_MINUTE
)< MY_LIMITS_MINUTE *2 THEN
MYRET:=2;
ELSE
MYRET:=3;
END IF;
RETURN MYRET;
END GIVE_SHIFT;
create or replace
FUNCTION ISSOLD(ProductCode IN VARCHAR2, Serial IN Varchar2)
RETURN VARCHAR2
AS
DCNO varchar2(50);
BEGIN
SELECT CONCAT(DOCUMENT_NO,CONCAT('|',TO_CHAR(DATETIME,'| YYYY-MM-DD HH24:MI:SS')
))
INTO DCNO
FROM EPIC.NB_MASTER_BARCODE_ARCTIC@EPIC_LINK
WHERE PRODUCT
= ProductCode
AND SERIAL_NUMBER = Serial
AND LPAD(DOCUMENT_NO,3) = '410' AND ROWNUM = 1;
IF DCNO IS NULL THEN
RETURN 'NOTSOLD';
ELSE
RETURN CONCAT('SOLD',CONCAT('|',DCNO));
END IF;
EXCEPTION
WHEN no_data_found THEN
IF DCNO IS NULL THEN
RETURN 'NOTSOLD';
ELSE

RETURN CONCAT('SOLD',CONCAT('|',DCNO));
END IF;
create or replace
FUNCTION TFF(dateFrom IN VARCHAR, dateTo IN VARCHAR)
RETURN VARCHAR2
IS
CURSOR c1 IS SELECT LOCATION,PRODUCT,SERIAL,TIME,SAPDATE FROM SORTINGBUFFERL3 WH
ERE status= 9 AND to_char(TIME,'YYYY-MM-DD') BETWEEN dateFrom AND dateTo;
c_prod c1%ROWTYPE;
BEGIN
open c1;
loop
fetch c1 into c_prod;
exit WHEN c1%NOTFOUND;
/*result:=DBMS_OUTPUT.put_line(c_prod.LOCATION || c_prod.PRODUCT || c_prod.Seria
l || c_prod.TIME || c_prod.SAPDATE);*/
END loop;
RETURN c_prod.LOCATION || c_prod.PRODUCT || c_prod.Serial || c_prod.TIME || c_pr
od.SAPDATE;
CLOSE c1;
END TFF;
create or replace
PROCEDURE CK_IFSOLD
AS
DCNO
VARCHAR2(15);
ISINT2WHL3 NUMBER;
ISINT2WH NUMBER;
MONTHDIFF NUMBER;
DTIME DATE;
CURSOR RW
IS
SELECT PRODUCT,SERIAL,LINE,SAPDATE FROM CHECKIFSOLD WHERE SOLDORREPACK = 0;
RW_DATA RW%ROWTYPE;
BEGIN
SET transaction name 'CK_IF_SOLD';
OPEN RW;
LOOP
FETCH RW INTO RW_DATA;
BEGIN
SELECT ORDER_NO,
DATETIME
INTO DCNO,
DTIME
FROM EPIC.NB_MASTER_BARCODE_ARCTIC@EPIC_LINK
WHERE PRODUCT
= RW_DATA.PRODUCT
AND SERIAL_NUMBER = RW_DATA.SERIAL
AND DATETIME
=
(SELECT MAX(DATETIME)
FROM EPIC.NB_MASTER_BARCODE_ARCTIC@EPIC_LINK
WHERE PRODUCT
= RW_DATA.PRODUCT
AND SERIAL_NUMBER = RW_DATA.SERIAL
);
SELECT CAST(TO_CHAR(SYSDATE,'MM') AS NUMBER) - CAST(SUBSTR(RW_DATA.SERIAL,
9,2) AS NUMBER)
INTO MONTHDIFF
FROM DUAL;
IF LPAD(DCNO,3) = '410' THEN

/* The product is sold */


UPDATE CHECKIFSOLD
SET SOLDORREPACK = 1,
DOCNO
= DCNO,
ABSOPERATIONDATE = DTIME,
LASTCHECK
= sysdate
WHERE PRODUCT
= RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
CASE
/*When line is 3*/
WHEN RW_DATA.LINE = '3' or RW_DATA.LINE = '6' THEN
IF (MONTHDIFF < 2) THEN
SELECT COUNT(LINE)
INTO ISINT2WHL3
FROM SORTING.TRANSACT2WHL3
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
IF ISINT2WHL3 = 0 THEN
/*INSERT
INTO SORTING.TRANSACT2WHL3
(
MUSER,
PLANT,
LINE,
PRODUCT,
SERIAL,
PRODDATE,
DOC_NO,
BF,
TR,
SAPDATE
)
(SELECT 'SORTING',
'ROGP',
LINE,
PRODUCT,
SERIAL,
SAPDATE,
DCNO,
1,1,
SAPDATE
FROM SORTING.CHECKIFSOLD
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL
);*/
/* DELETE FROM SORTINGBUFFERL3 WHERE PRODUCT = RW_DATA.PRODUCT AN
D SERIAL = RW_DATA.SERIAL AND SAPDATE = RW_DATA.SAPDATE;*/
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM SORTING.CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT INSERTED IN TRANSACT2WH'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
ELSE
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM SORTING.CHECK_STATUSES

WHERE DESCRIPTION = 'PRODUCT EXISTS IN TRANSACT2WH'


)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
ELSE
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT OLDER THAN 2 MONTHS'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
WHEN RW_DATA.LINE = '4' OR RW_DATA.LINE = '1' THEN
IF (MONTHDIFF < 2) THEN
SELECT COUNT(LINE)
INTO ISINT2WH
FROM SORTING.TRANSACT2WH
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
IF ISINT2WH = 0 THEN
/* INSERT
INTO SORTING.TRANSACT2WH
(
MUSER,
PLANT,
LINE,
PRODUCT,
SERIAL,
PRODDATE,
DOC_NO,
BF,
TR,
SAPDATE
)
(SELECT 'SORTING',
'ROGP',
LINE,
PRODUCT,
SERIAL,
SAPDATE,
DCNO,
1,1,
SAPDATE
FROM SORTING.CHECKIFSOLD
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL
);*/
/*DELETE FROM SORTINGBUFFER WHERE PRODUCT = RW_DATA.PRODUCT AND
SERIAL = RW_DATA.SERIAL AND SAPDATE = RW_DATA.SAPDATE;*/
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT INSERTED IN TRANSACT2WH'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;

ELSE
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT EXISTS IN TRANSACT2WH'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
ELSE
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT OLDER THAN 2 MONTHS'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
WHEN RW_DATA.LINE = '5' THEN
IF (MONTHDIFF > 2) THEN
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT OLDER THAN 2 MONTHS'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
END CASE;
/*DBMS_OUTPUT.PUT_LINE(rw_data.PRODUCT || ' ' || rw_data.SERIAL || ' ' |
| 'SOLD');*/
ELSE
/* THE PRODUCT HAS Y01 OR ANY OTHER OPERATION */
UPDATE CHECKIFSOLD
SET SOLDORREPACK = 2,
DOCNO
= DCNO,
ABSOPERATIONDATE = DTIME,
LASTCHECK
= sysdate
WHERE PRODUCT
= RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
CASE
WHEN RW_DATA.LINE = '3' or RW_DATA.LINE='6' THEN
IF (MONTHDIFF < 2) THEN
SELECT COUNT(LINE)
INTO ISINT2WHL3
FROM SORTING.TRANSACT2WHL3
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
IF ISINT2WHL3 = 0 THEN
/*INSERT
INTO SORTING.TRANSACT2WHL3
(
MUSER,
PLANT,
LINE,
PRODUCT,

SERIAL,
PRODDATE,
DOC_NO,
BF,
TR,
SAPDATE
)
(SELECT 'SORTING',
'ROGP',
LINE,
PRODUCT,
SERIAL,
SAPDATE,
DCNO,
1,1,
SAPDATE
FROM SORTING.CHECKIFSOLD
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL
);*/
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM SORTING.CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT INSERTED IN TRANSACT2WH'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
ELSE
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM SORTING.CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT EXISTS IN TRANSACT2WH'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
ELSE
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT OLDER THAN 2 MONTHS'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
WHEN RW_DATA.LINE = '4' OR RW_DATA.LINE = '1' THEN
IF (MONTHDIFF < 2) THEN
SELECT COUNT(LINE)
INTO ISINT2WH
FROM SORTING.TRANSACT2WH
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
IF ISINT2WH = 0 THEN
/*INSERT
INTO SORTING.TRANSACT2WH
(
MUSER,

PLANT,
LINE,
PRODUCT,
SERIAL,
PRODDATE,
DOC_NO,
BF,
TR,
SAPDATE
)
(SELECT 'SORTING',
'ROGP',
LINE,
PRODUCT,
SERIAL,
SAPDATE,
DCNO,
1,1,
SAPDATE
FROM SORTING.CHECKIFSOLD
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL
);*/
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT INSERTED IN TRANSACT2WH'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
ELSE
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT EXISTS IN TRANSACT2WH'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
ELSE
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT OLDER THAN 2 MONTHS'
)
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
END IF;
WHEN RW_DATA.LINE = '5' THEN
IF (MONTHDIFF > 2) THEN
UPDATE CHECKIFSOLD
SET STATUS =
(SELECT ID
FROM CHECK_STATUSES
WHERE DESCRIPTION = 'PRODUCT OLDER THAN 2 MONTHS'
)
WHERE PRODUCT = RW_DATA.PRODUCT

AND SERIAL
END IF;
END CASE;

= RW_DATA.SERIAL;

END IF;
/*DBMS_OUTPUT.PUT_LINE(rw_data.PRODUCT || ' ' || rw_data.SERIAL || ' ' ||
'Other Operation');*/
EXCEPTION
WHEN NO_DATA_FOUND THEN
/*DBMS_OUTPUT.PUT_LINE(RW_DATA.PRODUCT || ' ' || RW_DATA.SERIAL || ' ' ||
'NOT SOLD');*/
UPDATE CHECKIFSOLD
SET SOLDORREPACK = 0,
LASTCHECK
= sysdate
WHERE PRODUCT
= RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
/*CHECK IF THE PRODUCTS THAT ARE NOT SOLD OR Y01 ENTERED IN THE TRANSACT2W
H OR TRANSACT2WHL3*/
IF RW_DATA.LINE = '3' or RW_DATA.LINE = '6' THEN
SELECT COUNT(LINE)
INTO ISINT2WHL3
FROM SORTING.TRANSACT2WHL3
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
IF ISINT2WHL3 > 0 THEN
UPDATE CHECKIFSOLD SET SOLDORREPACK = 3, STATUS = (SELECT ID FROM
CHECK_STATUSES WHERE DESCRIPTION = 'PRODUCT INSERTED NORMAL IN WH') WHERE PRODUC
T = RW_DATA.PRODUCT AND SERIAL = RW_DATA.SERIAL AND SOLDORREPACK = 0;
END IF;
ELSE
SELECT COUNT(LINE)
INTO ISINT2WH
FROM SORTING.TRANSACT2WH
WHERE PRODUCT = RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
IF ISINT2WH > 0 THEN
UPDATE CHECKIFSOLD SET SOLDORREPACK = 3, STATUS = (SELECT ID FROM
CHECK_STATUSES WHERE DESCRIPTION = 'PRODUCT INSERTED NORMAL IN WH') WHERE PRODUC
T = RW_DATA.PRODUCT AND SERIAL = RW_DATA.SERIAL AND SOLDORREPACK = 0;
END IF;
END IF;
/* WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(RW_DATA.PRODUCT || ' ' || RW_DATA.SERIAL || ' ' || 'E
RROR');*/
END;
EXIT
WHEN RW%NOTFOUND;
END LOOP;
CLOSE RW;

COMMIT;
END CK_IFSOLD;
create or replace
PROCEDURE CK_INSERTCKIFSOLD(
iLINE
IN NUMBER ,
iPRODUCT IN VARCHAR2 ,
iSERIAL IN VARCHAR2 ,
iSAPDATE IN VARCHAR2 )
AS
SELROWS NUMBER;
BEGIN
SET transaction name 'CK_INSERT_IN_CHECKIFSOLD';
SELECT COUNT(LINE)
INTO SELROWS
FROM SORTING.CHECKIFSOLD
WHERE PRODUCT = iPRODUCT
AND SERIAL
= iSERIAL;
IF SELROWS = 0 THEN
INSERT
INTO SORTING.CHECKIFSOLD
(
LINE,
PRODUCT,
SERIAL,
SAPDATE,
ABSOPERATIONDATE
)
VALUES
(
iLINE,
iPRODUCT,
iSERIAL,
TO_DATE(iSAPDATE,'YYYY-MM-DD HH24:MI:SS'),
SYSDATE
);
END IF;
COMMIT;
END CK_INSERTCKIFSOLD;
create or replace
PROCEDURE
"CK_PRODUCT" (mPRODUCT IN VARCHAR,mSERIAL IN VARCHAR,lLine I
N INT)
IS
sbPRODUCT VARCHAR(15):='';
sbSERIAL VARCHAR(20):='';
shPRODUCT VARCHAR(15):='';
shSERIAL VARCHAR(20):='';
ssPRODUCT VARCHAR(15):='';
ssSERIAL VARCHAR(20):='';
ERR_PRODUCT EXCEPTION;
ERR_SERIAL EXCEPTION;
ERR_LINENO EXCEPTION;
BEGIN
IF TRIM(mPRODUCT)='' OR mPRODUCT IS NULL THEN
RAISE ERR_PRODUCT;
END IF;
IF TRIM(mSERIAL)='' OR mSERIAL IS NULL THEN

RAISE ERR_SERIAL;
END IF;
IF nvl(lLine,0)=0 THEN
RAISE ERR_LINENO;
END IF;
SELECT PRODUCT,SERIAL into sbPRODUCT,sbSERIAL from SORTING.SORTINGBUFFER i w
here i.PRODUCT=mPRODUCT AND i.SERIAL=mSERIAL;
SELECT PRODUCT,SERIAL into shPRODUCT,shSERIAL from SORTING.SORTINGHISTORY i
where i.PRODUCT=mPRODUCT AND i.SERIAL=mSERIAL;
SELECT PRODUCT,SERIAL into ssPRODUCT,ssSERIAL from SORTING.SORTING_STATUS i
where i.PRODUCT=mPRODUCT AND i.SERIAL=mSERIAL;
IF TRIM(sbPRODUCT)<>'' THEN /*If the records exist just update and let sor
ting system to continue */
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 where PRODUCT=mPRODUCT AND SER
IAL=mSERIAL;
ELSE
/*Check existing of serials into history and status, because anyhow is n
ot in sorting buffer*/
IF TRIM(shPRODUCT)='' AND TRIM(ssPRODUCT)='' THEN /*is not finding any
where just insert into buffer and let the sorting system to continue*/
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME, S
TATUS) VALUES(mPRODUCT, mSERIAL, lLine, SYSDATE, 0);
ELSE
IF TRIM(shPRODUCT)<>'' AND TRIM(ssPRODUCT)='' THEN
UPDATE SORTING.SORTINGHISTORY SET PACKTIME=SYSDATE, STATUS=1 WH
ERE PRODUCT=mPRODUCT AND SERIAL=mSERIAL;
INSERT INTO SORTING.SORTING_STATUS(PRODUCT, SERIAL, STATUS) VALU
ES(mPRODUCT, mSERIAL, '1;');
ELSE
IF TRIM(shPRODUCT)='' AND TRIM(ssPRODUCT)<>'' THEN
INSERT INTO SORTING.SORTINGHISTORY(PRODUCT, SERIAL, LINE, LO
CATION, PROTIME, PACKTIME, SORTTIME, SORTLOC, GROUPTIME, GROUPLOC, STATUS)
VALUES(mPRODUCT, mSERIAL, 0, 0, SYSDATE, SYSDATE, NULL, 0, N
ULL, 0, 0);
UPDATE SORTING.SORTING_STATUS SET STATUS=STATUS || '1;' WHER
E PRODUCT=mPRODUCT AND SERIAL=mSERIAL;
ELSE
UPDATE SORTING.SORTINGHISTORY SET PACKTIME=SYSDATE, STATUS=
1 WHERE PRODUCT=mPRODUCT AND SERIAL=mSERIAL;
UPDATE SORTING.SORTING_STATUS SET STATUS=STATUS || '1;' WHER
E PRODUCT=mPRODUCT AND SERIAL=mSERIAL;
END IF;
END IF;
END IF;
END IF;
--DBMS_OUTPUT.PUT_LINE('OK_ST');
COMMIT;
EXCEPTION
WHEN ERR_PRODUCT THEN raise_application_error(-20100, 'IS NOT PRODUCT');
WHEN ERR_SERIAL THEN raise_application_error(-20200, 'IS NOT SERIAL');
WHEN ERR_LINENO THEN raise_application_error(-20300, 'IS NOT PRODUCTION
LINE');
END;
create or replace
PROCEDURE
IS

"CLEAR_BUFFER" (MYARG IN INT)

lCount INT:=0;
BEGIN
IF MYARG=1 THEN
FOR cur_rec IN (SELECT i.PRODUCT,i.SERIAL,i.LOCATION,x.STATUS FROM SORTI
NG.SORTINGBUFFER i,SORTING.SORTING_STATUS x
WHERE i.PRODUCT=x.PRODUCT and i.SERIAL=x.SERIAL AND RPAD(i.STATUS,2)
IN ('10','20','30','50','60') AND TO_DATE(SYSDATE,'YYYY-MM-DD')>TO_DATE(i.TIME,
'YYYY-MM-DD'))
LOOP
INSERT INTO SORTING.TRANSACT2WH(MUSER, PLANT, LINE, PRODUCT, SERIAL,
PRODDATE, TRANSFER, TRANSF_DATE, IDTRANSACT, DOC_NO, WHADDR, PRODUCTCLASS)
VALUES('ROOT', 'ROGP',cur_rec.LOCATION,cur_rec.PRODUCT, cur_rec.SERI
AL, SYSDATE, 0, SYSDATE, 0, '', '', '');
UPDATE SORTING.SORTING_STATUS SET STATUS=STATUS || ';90' WHERE PRODU
CT=cur_rec.PRODUCT AND SERIAL=cur_rec.SERIAL;
DELETE FROM SORTING.SORTINGBUFFER WHERE PRODUCT=cur_rec.PRODUCT AND
SERIAL=cur_rec.SERIAL;
DBMS_OUTPUT.PUT_LINE(cur_rec.PRODUCT || ' ' || cur_rec.SERIAL || ' '
|| cur_rec.LOCATION || ' ' || cur_rec.STATUS );
lCount:=lCount+1;
END LOOP;
ELSE
FOR cur_rec IN (SELECT i.PRODUCT,i.SERIAL,i.LOCATION,x.STATUS FROM SORTI
NG.SORTINGBUFFER i,SORTING.SORTING_STATUS x
WHERE i.PRODUCT=x.PRODUCT and i.SERIAL=x.SERIAL AND RPAD(i.STATUS,2)
IN ('-2'))
LOOP
DELETE FROM SORTING.SORTINGBUFFER WHERE PRODUCT=cur_rec.PRODUCT AND
SERIAL=cur_rec.SERIAL;
DBMS_OUTPUT.PUT_LINE(cur_rec.PRODUCT || ' ' || cur_rec.SERIAL || ' '
|| cur_rec.LOCATION || ' ' || cur_rec.STATUS );
lCount:=lCount+1;
END LOOP;
END IF;
COMMIT;
DBMS_OUTPUT.PUT_LINE('TOTAL IN PROCESS : ' || lCount);
END;
create or replace
PROCEDURE ENDYEARSOLDCHECK AS
DCNO
VARCHAR2(15);
I NUMBER := 0;
CURSOR RW
IS
SELECT PRODUCT,SERIAL FROM TRANSACT2WH WHERE DOC_NO IS NULL;
RW_DATA RW%ROWTYPE;
DATA_FOUND EXCEPTION;
BEGIN
SET transaction name 'ENDOFYEAR';
OPEN RW;
LOOP
FETCH RW INTO RW_DATA;
BEGIN
SELECT DOCUMENT_NO
INTO DCNO
FROM EPIC.NB_MASTER_BARCODE_ARCTIC@EPIC_LINK
WHERE PRODUCT
= RW_DATA.PRODUCT
AND SERIAL_NUMBER = RW_DATA.SERIAL
AND DATETIME
=

(SELECT MAX(DATETIME)
FROM EPIC.NB_MASTER_BARCODE_ARCTIC@EPIC_LINK
WHERE PRODUCT
= RW_DATA.PRODUCT
AND SERIAL_NUMBER = RW_DATA.SERIAL
);
RAISE DATA_FOUND;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN DATA_FOUND THEN
IF LPAD(DCNO,3) = '410' THEN
/* The product is sold */
UPDATE TRANSACT2WH
SET DOC_NO = DCNO
WHERE PRODUCT
= RW_DATA.PRODUCT
AND SERIAL
= RW_DATA.SERIAL;
COMMIT;
END IF;
/* WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(RW_DATA.PRODUCT || ' ' || RW_DATA.SERIAL || ' ' || 'E
RROR');*/
END;
EXIT
WHEN RW%NOTFOUND;
END LOOP;
CLOSE RW;
COMMIT;
END ENDYEARSOLDCHECK;
create or replace
PROCEDURE
INSERTBUFFERTOTRANSACT AS
TODATE VARCHAR2(20):=TO_CHAR(SYSDATE-1,'YYYY-MM-DD');
FROMDATE VARCHAR2(20):=TO_CHAR(trunc(SYSDATE, 'YYYY'),'YYYY-MM-DD');
CURSOR RW IS SELECT location, product, serial, TO_CHAR(TIME,'YYYY-MM-DD HH
24:MI:SS') TIME, TO_CHAR(SAPDATE,'YYYY-MM-DD HH24:MI:SS') SAPDATE
FROM sortingbufferl3
WHERE TO_CHAR(SAPDATE,'YYYY-MM-DD') BETWEEN FROMDATE AND TODATE AND (Status
= 9 or Status=-4);
RW_DATA RW%ROWTYPE;
BEGIN
sorting.sendtoemailfrombuffer;
SET transaction name 'INSERT_BUFFER_IN_T2WHL3';
IF TODATE = TO_CHAR(SYSDATE,'YYYY-MM-DD') THEN
RETURN;
END IF;
OPEN RW;
LOOP
FETCH RW INTO RW_DATA;
EXIT WHEN RW%NOTFOUND;
BEGIN
INSERT
INTO TRANSACT2WHL3
(

MUSER,
PLANT,
LINE,
PRODUCT,
SERIAL,
PRODDATE,
SAPDATE,
REPACK,
BF,
TR
)
VALUES
(
'SORTING' ,
'ROGP',
RW_DATA.LOCATION,
RW_DATA.PRODUCT,
RW_DATA.SERIAL,
to_date(RW_DATA.TIME,'YYYY-MM-DD HH24:MI:SS'),
to_date(RW_DATA.SAPDATE,'YYYY-MM-DD HH24:MI:SS'),
0,1,1
);
DELETE
FROM sortingbufferl3
WHERE product = RW_DATA.PRODUCT
AND serial
= RW_DATA.SERIAL;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('EROARE');
END;
END LOOP;
CLOSE RW;
END INSERTBUFFERTOTRANSACT;
create or replace
PROCEDURE INSERTINTOT2WH(
STAT
IN NUMBER ,
FROMDATE IN VARCHAR2 ,
TODATE IN VARCHAR2 )
AS
CURSOR RW
IS
SELECT location,
product,
serial,
TO_CHAR(TIME,'YYYY-MM-DD HH24:MI:SS') TIME,
TO_CHAR(SAPDATE,'YYYY-MM-DD HH24:MI:SS') SAPDATE
FROM sortingbufferl3
WHERE TO_CHAR(SAPDATE,'YYYY-MM-DD') BETWEEN FROMDATE AND TODATE
AND Status = STAT ;
RW_DATA RW%ROWTYPE;
BEGIN
SET transaction name 'INSERT_IN_T2WHL3';
IF TODATE = TO_CHAR(SYSDATE,'YYYY-MM-DD') THEN
RETURN;
END IF;
OPEN RW;

LOOP
FETCH RW INTO RW_DATA;
EXIT WHEN RW%NOTFOUND;
BEGIN
INSERT
INTO TRANSACT2WHL3
(
MUSER,
PLANT,
LINE,
PRODUCT,
SERIAL,
PRODDATE,
SAPDATE,
REPACK,
BF,
TR
)
VALUES
(
'SORTING' ,
'ROGP',
RW_DATA.LOCATION,
RW_DATA.PRODUCT,
RW_DATA.SERIAL,
to_date(RW_DATA.TIME,'YYYY-MM-DD HH24:MI:SS'),
to_date(RW_DATA.SAPDATE,'YYYY-MM-DD HH24:MI:SS'),
0,1,1
);
DELETE
FROM sortingbufferl3
WHERE product = RW_DATA.PRODUCT
AND serial
= RW_DATA.SERIAL;
DBMS_OUTPUT.PUT_LINE('EXECUTAT');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('EROARE');
END;
END LOOP;
CLOSE RW;
END INSERTINTOT2WH;
create or replace
PROCEDURE KILLSESSION (S_SQLID IN VARCHAR2 ) AS
BEGIN
for rec in (SELECT sid,serial#
FROM v$session
WHERE status = 'ACTIVE'
AND username ='NCMAIN'
AND sql_id =S_SQLID ) loop
execute immediate 'Alter System Kill Session '''|| rec.Sid || ',' || rec.Serial#
|| ''' IMMEDIATE';
end loop;
END KILLSESSION;
create or replace
PROCEDURE
IS

"PROC_1" (MYARG IN NUMBER)

BEGIN
EXECUTE IMMEDIATE 'select * from SORTINGHISTORY where ROWNUM<100';
END;
create or replace
PROCEDURE
"PROC_E2" (iMATERIAL IN VARCHAR,iSERIAL VARCHAR,pLine IN NUM
BER,lSTATUS IN NUMBER)
IS
BEGIN
SET TRANSACTION NAME 'E2';
IF lSTATUS=0 THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME, STATU
S) VALUES(iMATERIAL,iSERIAL,pLine, SYSDATE,lSTATUS);
/*DBMS_OUTPUT.PUT_LINE('INSERT IsOnSortBF=1 ');*/
ELSE
UPDATE SORTING.SORTINGBUFFER SET STATUS=-2 WHERE PRODUCT=iMATERIAL AND S
ERIAL=iSERIAL;
/*DBMS_OUTPUT.PUT_LINE('UPDATE IsOnSortBF=1 ');*/
END IF;
COMMIT;
END;
create or replace
PROCEDURE
"PROC_E2_L3" (iMATERIAL IN VARCHAR,iSERIAL VARCHAR,pLine IN
NUMBER,lSTATUS IN NUMBER)
IS
BEGIN
SET TRANSACTION NAME 'E2_L3';
IF lSTATUS=0 THEN
INSERT INTO SORTING.SORTINGBUFFERL3(PRODUCT, SERIAL, LOCATION, TIME,STAT
US) VALUES(iMATERIAL,iSERIAL,pLine, SYSDATE,lSTATUS);
/*DBMS_OUTPUT.PUT_LINE('INSERT IsOnSortBF=1 ');*/
ELSE
UPDATE SORTING.SORTINGBUFFERL3 SET STATUS=-2 WHERE PRODUCT=iMATERIAL AND
SERIAL=iSERIAL;
/*DBMS_OUTPUT.PUT_LINE('UPDATE IsOnSortBF=1 ');*/
END IF;
COMMIT;
END;
create or replace
PROCEDURE PROC_REPORTSERIAL(mPRODUCT IN VARCHAR,mSERIAL IN VARCHAR,mLine IN INT)
IS
num INTEGER(15):=0;
ERR_PRODUCT EXCEPTION;
ERR_SERIAL EXCEPTION;
ERR_LINENO EXCEPTION;
BEGIN
IF TRIM(mPRODUCT)='' OR mPRODUCT IS NULL THEN
RAISE ERR_PRODUCT;
END IF;
IF TRIM(mSERIAL)='' OR mSERIAL IS NULL THEN
RAISE ERR_SERIAL;
END IF;
IF nvl(mLine,0)=0 THEN
RAISE ERR_LINENO;
END IF;

select count(ID) into num from Sorting.SORTING_TEMPL3 where ((BCD1_PRO=mPR


ODUCT and BCD1_SERIAL=mSERIAL) or (BCD2_PRO=mPRODUCT and BCD2_SERIAL=mSERIAL)
or (BCD3_PRO=mPRODUCT and BCD3_SERIAL=mSERIAL) or (BCD4_PRO=mPRODUCT and
BCD4_SERIAL=mSERIAL));
IF (num=0)
THEN select mPRODUCT,mSERIAL,mLine,sysdate,'nu a ajuns la intrare in dep
ozit' from Sorting.SORTING_TEMPL3;
ELSE
select CASE WHEN BCD1_PRO<>'0000000000' THEN BCD1_PRO else
CASE WHEN BCD2_PRO<>'0000000000' THEN BCD2_PRO else
CASE WHEN BCD3_PRO<>'0000000000' THEN BCD3_PRO else BCD4_PRO END
END END AS COD,
CASE WHEN BCD1_SERIAL<>'000000000000' THEN BCD1_SERIAL else
CASE WHEN BCD2_SERIAL<>'000000000000' THEN BCD2_SERIAL else
CASE WHEN BCD3_SERIAL<>'000000000000' THEN BCD3_SERIAL else
BCD4_SERIAL END END END AS SERIAL,mLine, BCDTIME, RESULT
from Sorting.SORTING_TEMPL3
where (((BCD1_PRO=mPRODUCT and BCD1_SERIAL=mSERIAL) or (BCD2_PRO=mPRODU
CT and BCD2_SERIAL=mSERIAL) or (BCD3_PRO=mPRODUCT and BCD3_SERIAL=mSERIAL) or (B
CD4_PRO=mPRODUCT and BCD4_SERIAL=mSERIAL))) and ROWNUM=1
order by BCDTIME desc;
END IF;
EXCEPTION
WHEN ERR_PRODUCT THEN raise_application_error(-20100, 'IS NOT PRODUCT');
WHEN ERR_SERIAL THEN raise_application_error(-20200, 'IS NOT SERIAL');
WHEN ERR_LINENO THEN raise_application_error(-20300, 'IS NOT PRODUCTION
LINE');
NULL;
END PROC_REPORTSERIAL;
create or replace
PROCEDURE
"PROC_REW_ABS" (iMATERIAL IN VARCHAR,iSERIAL VARCHAR,oMATERI
AL IN VARCHAR,oSERIAL IN VARCHAR,pLine IN NUMBER,lSTATUS IN NUMBER,IsInsert IN N
UMBER)
IS
BEGIN
SET TRANSACTION NAME 'E2_REW_ABS';
IF IsInsert=0 THEN
INSERT INTO SORTING.REWORK(PRODUCT, SERIAL, RECEPSION_TIME, N_PRODUCT, N
_SERIAL, STATUS, FLAG, TIME_STAMP, LINE)
VALUES(oMATERIAL, oSERIAL, SYSDATE, iMATERIAL, iSERIAL, lSTATUS, 0, 0, p
Line);
ELSE
UPDATE SORTING.REWORK SET STATUS=9 WHERE N_PRODUCT=iMATERIAL AND N_SERIA
L=iSERIAL AND STATUS<9;
END IF;
COMMIT;
END;
create or replace
PROCEDURE
PROC_STATUS (iMATERIAL IN VARCHAR,iSERIAL VARCHAR,pLine IN NUM
BER)
IS
s_SERIAL VARCHAR(12):='';
s_PRODUCT VARCHAR(10):='';
WSTAT INTEGER(1):=0;
mSTATUS INTEGER(3):=-1;
BEGIN

/*
IF SERIAL IS ON TRANSACT2WH THEN INSERT INTO SORTING_BUFFER with 3 STATU
S
IF SERIAL IS ON SORTING_BUFFER THEN UPDATE SORTINGHISTORY table in the R
EPACK field with n:=n+1
AND in SORTINGBUFFER the STATUS field should be 1
*/
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.SORTINGBUFFER
z WHERE z.PRODUCT=iMATERIAL AND z.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=1;
END;
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.SORTINGHISTOR
Y z WHERE z.PRODUCT=iMATERIAL AND z.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=WSTAT+2;
END;
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.TRANSACT2WH i
WHERE i.PRODUCT=iMATERIAL AND i.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=WSTAT+4;
END;
SET TRANSACTION NAME 'E3';
CASE
WHEN WSTAT=7 OR WSTAT=5 THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME, STATU
S) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE, 1);
IF WSTAT=7 THEN
UPDATE SORTING.SORTINGHISTORY SET REPACK=REPACK+1 WHERE PRODUCT=iMAT
ERIAL AND SERIAL=iSERIAL;
END IF;
WHEN WSTAT=6 OR WSTAT=4 THEN
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
WHEN WSTAT=3 OR WSTAT=1 THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME, STATU
S) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE, 3);
WHEN WSTAT=2 OR WSTAT=0 THEN
UPDATE SORTING.SORTINGBUFFER SET STATUS=3 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
END CASE;
/*
CASE

WHEN WSTAT = 7 OR WSTAT = 4 OR WSTAT=6 OR WSTAT = 1


THEN
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
IF SQL%NOTFOUND THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME, S
TATUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE, 3);
END IF;
ELSE
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
END CASE;
*/
COMMIT;
END;
create or replace
PROCEDURE
"PROC_STATUS_L3" (iMATERIAL IN VARCHAR,iSERIAL VARCHAR,pLine
IN NUMBER)
IS
s_SERIAL VARCHAR(12):='';
s_PRODUCT VARCHAR(10):='';
WSTAT INTEGER(1):=0;
mSTATUS INTEGER(3):=-1;
BEGIN
/*
IF SERIAL IS ON TRANSACT2WH THEN INSERT INTO SORTING_BUFFER with 3 STATU
S
IF SERIAL IS ON SORTING_BUFFER THEN UPDATE SORTINGHISTORY table in the R
EPACK field with n:=n+1
AND in SORTINGBUFFER the STATUS field should be 1
*/
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.SORTINGBUFFER
L3 z WHERE z.PRODUCT=iMATERIAL AND z.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=1;
END;
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.SORTINGHISTOR
Y z WHERE z.PRODUCT=iMATERIAL AND z.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=WSTAT+2;
END;
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.TRANSACT2WHL3
i WHERE i.PRODUCT=iMATERIAL AND i.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=WSTAT+4;
END;
SET TRANSACTION NAME 'E3';

CASE
WHEN WSTAT=7 OR WSTAT=5 THEN
INSERT INTO SORTING.SORTINGBUFFERL3(PRODUCT, SERIAL, LOCATION, TIME, STA
TUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE, 1);
IF WSTAT=7 THEN
UPDATE SORTING.SORTINGHISTORY SET REPACK=REPACK+1 WHERE PRODUCT=iMAT
ERIAL AND SERIAL=iSERIAL;
END IF;
WHEN WSTAT=6 OR WSTAT=4 THEN
UPDATE SORTING.SORTINGBUFFERL3 SET STATUS=1 WHERE PRODUCT=iMATERIAL AND
SERIAL=iSERIAL;
WHEN WSTAT=3 OR WSTAT=1 THEN
INSERT INTO SORTING.SORTINGBUFFERL3(PRODUCT, SERIAL, LOCATION, TIME, STA
TUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE, 3);
WHEN WSTAT=2 OR WSTAT=0 THEN
UPDATE SORTING.SORTINGBUFFERL3 SET STATUS=3 WHERE PRODUCT=iMATERIAL AND
SERIAL=iSERIAL;
END CASE;
/*
CASE
WHEN WSTAT = 7 OR WSTAT = 4 OR WSTAT=6 OR WSTAT = 1
THEN
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
IF SQL%NOTFOUND THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME, S
TATUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE, 3);
END IF;
ELSE
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
END CASE;
*/
COMMIT;
END;
create or replace
PROCEDURE
"PROC_STATUS01" (iMATERIAL IN VARCHAR,iSERIAL VARCHAR,pLine
IN NUMBER,sDATE IN VARCHAR)
IS
s_SERIAL VARCHAR(12):='';
s_PRODUCT VARCHAR(10):='';
WSTAT INTEGER(1):=0;
mSTATUS INTEGER(3):=-1;
BEGIN
/*
IF SERIAL IS ON TRANSACT2WH THEN INSERT INTO SORTING_BUFFER with 3 STATU
S
IF SERIAL IS ON SORTING_BUFFER THEN UPDATE SORTINGHISTORY table in the R
EPACK field with n:=n+1
AND in SORTINGBUFFER the STATUS field should be 1
*/
/*
BEGIN

IF pLine=5 THEN
return;
END IF;
END;
*/
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.SORTINGBUFFER
z WHERE z.PRODUCT=iMATERIAL AND z.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=1;
END;
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.SORTINGHISTOR
Y z WHERE z.PRODUCT=iMATERIAL AND z.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=WSTAT+2;
END;
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.TRANSACT2WH i
WHERE i.PRODUCT=iMATERIAL AND i.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
WSTAT:=WSTAT+4;
END;
SET TRANSACTION NAME 'E3';
CASE
WHEN WSTAT=7 OR WSTAT=5 THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME,SAPDAT
E, STATUS) VALUES(iMATERIAL, iSERIAL, pLine,SYSDATE, TO_DATE(sDATE,'DD-MM-YYYY H
H24:MI:SS'), 1);
IF WSTAT=7 THEN
UPDATE SORTING.SORTINGHISTORY SET REPACK=REPACK+1 WHERE PRODUCT=iMAT
ERIAL AND SERIAL=iSERIAL;
END IF;
WHEN WSTAT=6 OR WSTAT=4 THEN
UPDATE SORTING.SORTINGBUFFER SET STATUS=1,SAPDATE=TO_DATE(sDATE,'DD-MM-Y
YYY HH24:MI:SS') WHERE PRODUCT=iMATERIAL AND SERIAL=iSERIAL;
WHEN WSTAT=3 OR WSTAT=1 THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME,SAPDAT
E, STATUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE,TO_DATE(sDATE,'DD-MM-YYYY H
H24:MI:SS'), 3);
WHEN WSTAT=2 OR WSTAT=0 THEN
UPDATE SORTING.SORTINGBUFFER SET STATUS=3 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
END CASE;
/*
CASE

WHEN WSTAT = 7 OR WSTAT = 4 OR WSTAT=6 OR WSTAT = 1


THEN
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
IF SQL%NOTFOUND THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME, S
TATUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE, 3);
END IF;
ELSE
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
END CASE;
*/
COMMIT;
END;
create or replace
PROCEDURE
"PROC_STATUS01_L3" (iMATERIAL IN VARCHAR,iSERIAL VARCHAR,pLi
ne IN NUMBER,sDATE IN VARCHAR)
IS
s_SERIAL VARCHAR(12):='';
s_PRODUCT VARCHAR(10):='';
WSTAT INTEGER(1):=0;
mSTATUS INTEGER(3):=-1;
v_code NUMBER;
v_errm VARCHAR2(64);
BEGIN
/*
IF SERIAL IS ON TRANSACT2WH THEN INSERT INTO SORTING_BUFFER with 3 STATU
S
IF SERIAL IS ON SORTING_BUFFER THEN UPDATE SORTINGHISTORY table in the R
EPACK field with n:=n+1
AND in SORTINGBUFFER the STATUS field should be 1
*/
/*
IF sDATE IS NULL OR TRIM(sDATE)='' THEN
INSERT INTO SORTING.PROC_LOG( DATETIME, VALUE, PRODUCT)
VALUES( SYSDATE, 'sDATE IS NULL or BLANK', iMATERIAL || iSERIAL);
END IF;
*/
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.SORTINGBUFFER
L3 z WHERE z.PRODUCT=iMATERIAL AND z.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND THEN WSTAT:=1;
WHEN OTHERS THEN INSERT INTO SORTING.PROC_LOG( DATETIME, VALUE, PRO
DUCT) VALUES( SYSDATE, 'For WSTAT=1 , UNKNOWN EXCEPTION', iMATERIAL || iSERIAL);
END;
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.SORTINGHISTOR
Y z WHERE z.PRODUCT=iMATERIAL AND z.SERIAL=iSERIAL;
EXCEPTION
WHEN NO_DATA_FOUND THEN WSTAT:=WSTAT+2;
WHEN OTHERS THEN INSERT INTO SORTING.PROC_LOG( DATETIME, VALUE, PRO
DUCT) VALUES( SYSDATE, 'For WSTAT+=2 , UNKNOWN EXCEPTION', iMATERIAL || iSERIAL)
;
END;
BEGIN
SELECT PRODUCT,SERIAL INTO s_PRODUCT,s_SERIAL FROM SORTING.TRANSACT2WHL3

i WHERE i.PRODUCT=iMATERIAL AND i.SERIAL=iSERIAL;


EXCEPTION
WHEN NO_DATA_FOUND THEN WSTAT:=WSTAT+4;
WHEN OTHERS THEN INSERT INTO SORTING.PROC_LOG( DATETIME, VALUE, PRO
DUCT) VALUES( SYSDATE, 'For WSTAT+=4 , UNKNOWN EXCEPTION', iMATERIAL || iSERIAL)
;
END;
SET TRANSACTION NAME 'E3';
CASE
WHEN WSTAT=7 OR WSTAT=5 THEN
INSERT INTO SORTING.SORTINGBUFFERL3(PRODUCT, SERIAL, LOCATION, TIME,SAPD
ATE, STATUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE,TO_DATE(sDATE,'DD-MM-YYYY
HH24:MI:SS'), 1);
/*INSERT INTO SORTING.PROC_LOG( DATETIME, VALUE, PRODUCT)
VALUES( SYSDATE, 'WSTAT : ' || WSTAT || ' INSERT ' || ' sDATE : ' || sDA
TE || ' sDATE CONV : ' || TO_DATE(sDATE,'DD-MM-YYYY HH24:MI:SS'), iMATERIAL || i
SERIAL);*/
IF WSTAT=7 THEN
UPDATE SORTING.SORTINGHISTORY SET REPACK=REPACK+1 WHERE PRODUCT=iMAT
ERIAL AND SERIAL=iSERIAL;
END IF;
WHEN WSTAT=6 OR WSTAT=4 THEN
UPDATE SORTING.SORTINGBUFFERL3 SET STATUS=1,SAPDATE=TO_DATE(sDATE,'DD-MM
-YYYY HH24:MI:SS') WHERE PRODUCT=iMATERIAL AND SERIAL=iSERIAL;
/*INSERT INTO SORTING.PROC_LOG( DATETIME, VALUE, PRODUCT)
VALUES( SYSDATE, 'WSTAT : ' || WSTAT || ' UPDATE ' || ' sDATE : ' || sDA
TE || ' sDATE CONV : ' || TO_DATE(sDATE,'DD-MM-YYYY HH24:MI:SS'), iMATERIAL || i
SERIAL);*/
WHEN WSTAT=3 OR WSTAT=1 THEN
INSERT INTO SORTING.SORTINGBUFFERL3(PRODUCT, SERIAL, LOCATION, TIME,SAPD
ATE, STATUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE,TO_DATE(sDATE,'DD-MM-YYYY
HH24:MI:SS'), 3);
/*INSERT INTO SORTING.PROC_LOG( DATETIME, VALUE, PRODUCT)
VALUES( SYSDATE, 'WSTAT : ' || WSTAT || ' INSERT ' || ' sDATE : ' || sDA
TE || ' sDATE CONV : ' || TO_DATE(sDATE,'DD-MM-YYYY HH24:MI:SS'), iMATERIAL || i
SERIAL);*/
WHEN WSTAT=2 OR WSTAT=0 THEN
UPDATE SORTING.SORTINGBUFFERL3 SET STATUS=3 WHERE PRODUCT=iMATERIAL AND
SERIAL=iSERIAL;
/*INSERT INTO SORTING.PROC_LOG(DATETIME, VALUE, PRODUCT)
VALUES(SYSDATE, 'WSTAT : ' || WSTAT || ' UPDATE ' || ' sDATE : ' || sDAT
E || ' sDATE CONV : ' || TO_DATE(sDATE,'DD-MM-YYYY HH24:MI:SS'), iMATERIAL || iS
ERIAL);*/
ELSE
INSERT INTO SORTING.PROC_LOG(DATETIME,VALUE, PRODUCT) VALUES (SYSDATE,'A
LTA VALOARE',iMATERIAL || iSERIAL );
END CASE;
EXCEPTION
WHEN OTHERS THEN
v_code := SQLCODE;
v_errm := SUBSTR(SQLERRM, 1 , 64);
INSERT INTO SORTING.PROC_LOG(DATETIME,VALUE, PRODUCT) VALUES (SYSDATE,'ERR
_CODE : ' || v_code || ' - ' || v_errm , iMATERIAL || iSERIAL );

/*
CASE
WHEN WSTAT = 7 OR WSTAT = 4 OR WSTAT=6 OR WSTAT = 1
THEN
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
IF SQL%NOTFOUND THEN
INSERT INTO SORTING.SORTINGBUFFER(PRODUCT, SERIAL, LOCATION, TIME, S
TATUS) VALUES(iMATERIAL, iSERIAL, pLine, SYSDATE, 3);
END IF;
ELSE
UPDATE SORTING.SORTINGBUFFER SET STATUS=1 WHERE PRODUCT=iMATERIAL AND SE
RIAL=iSERIAL;
END CASE;
*/
COMMIT;

END;
create or replace
Procedure REPO2ARCELIK
(
FROMDATE IN VARCHAR2
,TODATE IN VARCHAR2
,LINENO IN NUMBER
,TARGETQTY IN NUMBER
,TIMEOFFSET IN NUMBER DEFAULT 0
,io_cursor IN OUT sys_refcursor
) AS
MYDATETIME DATE:=SYSDATE;
MY_PRODUCT VARCHAR2(22);
MY_SERIAL VARCHAR2(22);
MY_COUNT NUMBER;
CURSOR CURSOR_ IS select PRODDATE,PRODUCT,SERIAL from TRANSACT2WH where PRODDATE
>=TO_DATE(FROMDATE,'YYYY-MM-DD HH24:MI:SS');
CURSOR CURSOR_L3 IS select PRODDATE from TRANSACT2WHL3 where PRODDATE>=TO_DATE(F
ROMDATE,'YYYY-MM-DD HH24:MI:SS');
BEGIN
/*ActualProduction = (lmCurrentMinute - SHIFT_START_WORK - BREAK_SO_FAR) / (PR
ODUCTION_PLAN.mBrutDurationMin - PRODUCTION_PLAN.mTotalBreakMin) * PRODUCTION_PL
AN.mQTYTarget*/
for rec IN (SELECT COUNT(*) as MyCount from TRANSACT2WH where PRODDATE>=TO_DA
TE(FROMDATE,'YYYY-MM-DD HH24:MI:SS'))
LOOP
MY_COUNT:=rec.MyCount;
END LOOP;
SYS.DBMS_OUTPUT.ENABLE(MY_COUNT*128);
OPEN CURSOR_ ;
LOOP
FETCH CURSOR_ INTO MYDATETIME,MY_PRODUCT,MY_SERIAL;
SYS.DBMS_OUTPUT.PUT_LINE(TO_CHAR(MYDATETIME,'YYYY-MM-DD HH24:MI:SS') ||
' ' || MY_PRODUCT || ' ' || MY_SERIAL || ' ' || CURSOR_%ROWCOUNT || ' ' || MY_CO
UNT);
EXIT WHEN CURSOR_%NOTFOUND;
END LOOP;

CLOSE CURSOR_;
COMMIT;
END REPO2ARCELIK;
create or replace
PROCEDURE REPORT2ARCELIK (
FROMDATE IN VARCHAR2
,ACTUALTIME IN VARCHAR2
,LINENO IN NUMBER
,TARGETQTY IN NUMBER
,BREAKSOFAR IN NUMBER
,TIMEOFFSET IN NUMBER DEFAULT 0
,io_cursor IN OUT sys_refcursor
) AS
MYDATETIME DATE:=TO_DATE(ACTUALTIME,'YYYY-MM-DD HH24:MI:SS');
MY_PRODUCT VARCHAR2(22):='';
MY_SERIAL VARCHAR2(22):='';
MY_COUNT NUMBER:=0;
MYSHIFT NUMBER:=0;
STARTSHIFT VARCHAR(22):='';
MYDATE VARCHAR(32):='';
M NUMBER(10,4):=0;
N NUMBER(10,4):=0;
AQ NUMBER(10,6):=0;
MYHOUR NUMBER:=0;
MYMINUTE NUMBER:=0;
STARTSHIFTMINUTE NUMBER:=0;
TOTALSHIFTTIME NUMBER:=0;
TOTALBREAKTIME NUMBER:=0;
BEGIN
SELECT TO_NUMBER(TO_CHAR(MYDATETIME ,'HH24')) INTO MYHOUR FROM DUAL;
SELECT TO_NUMBER(TO_CHAR(MYDATETIME ,'MI')) INTO MYMINUTE FROM DUAL;
MYSHIFT:=GIVE_SHIFT(MYDATETIME,'ARCTIC');
/*StarShift time according with ARCTIC datetime*/
IF MYSHIFT=1 THEN
STARTSHIFT:=' 00:00:00';
STARTSHIFTMINUTE:=0;
TOTALSHIFTTIME:=510;
TOTALBREAKTIME:=50;
ELSIF MYSHIFT=2 THEN
STARTSHIFT:=' 08:30:00';
STARTSHIFTMINUTE:=510;
TOTALSHIFTTIME:=510;
TOTALBREAKTIME:=50;
ELSE
STARTSHIFT:=' 17:00:00';
STARTSHIFTMINUTE:=1020;
TOTALSHIFTTIME:=420;
TOTALBREAKTIME:=40;
END IF;
/*
SYS.DBMS_OUTPUT.ENABLE(50000);
MYDATE:=CONCAT(FROMDATE,STARTSHIFT);
SYS.DBMS_OUTPUT.PUT_LINE(MYDATE);
*/
M:=((MYHOUR*60)+MYMINUTE)-STARTSHIFTMINUTE-BREAKSOFAR;

N:=TOTALSHIFTTIME-TOTALBREAKTIME;
AQ:=M/N*TARGETQTY;
IF LINENO=3 THEN
OPEN io_cursor FOR select TO_CHAR(PRODDATE-TIMEOFFSET/1440,'YYYYMMDD') as TA
RIH,'ROGP' as ISLETME,'PL3' as HAT,
CAST(GIVE_SHIFT(PRODDATE - TIMEOFFSET/1440,'ARCTIC') as INTEGER) as VARDYIA,
CAST(TARGETQTY as INTEGER)as V_HEDEF,CAST(AQ as INTEGER) as A_HEDEF,COUNT(*) as
FIILI
from TRANSACT2WHL3
/*where BF=6 AND TR=6 AND PRODDATE>=TO_DATE(FROMDATE,'YYYY
-MM-DD HH24:MI:SS') */
where BF=6 AND TR=6 AND PRODDATE - TIMEOFFSET/1440 >=TO_DA
TE(CONCAT(SUBSTR(ACTUALTIME,0,10),STARTSHIFT),'YYYY-MM-DD HH24:MI:SS')
AND LINE IN (3,6)
group by GIVE_SHIFT(PRODDATE - TIMEOFFSET/1440,'ARCTIC'),T
O_CHAR(PRODDATE-TIMEOFFSET/1440,'YYYYMMDD')
order by TO_CHAR(PRODDATE-TIMEOFFSET/1440,'YYYYMMDD');
ELSE
OPEN io_cursor FOR select TO_CHAR(PRODDATE-TIMEOFFSET/1440,'YYYYMMDD') as TA
RIH,'ROGP' as ISLETME,CONCAT('PL',LINE) as HAT,
CAST(GIVE_SHIFT(PRODDATE - TIMEOFFSET/1440,'ARCTIC') as INTEGER) as VARDYIA,
CAST(TARGETQTY as INTEGER) as V_HEDEF,CAST(AQ as INTEGER) as A_HEDEF,COUNT(*) as
FIILI
from TRANSACT2WH
/*where BF=6 AND TR=6 AND PRODDATE>=TO_DATE(FROMDATE,'YYYY
-MM-DD HH24:MI:SS') */
where BF=6 AND TR=6 AND PRODDATE - TIMEOFFSET/1440 >=TO_DA
TE(CONCAT(SUBSTR(ACTUALTIME,0,10),STARTSHIFT),'YYYY-MM-DD HH24:MI:SS')
AND LINE=LINENO
group by LINE,GIVE_SHIFT(PRODDATE - TIMEOFFSET/1440,'ARCTI
C'),TO_CHAR(PRODDATE-TIMEOFFSET/1440,'YYYYMMDD')
order by TO_CHAR(PRODDATE-TIMEOFFSET/1440,'YYYYMMDD'),LINE
;
END IF;
END REPORT2ARCELIK;
create or replace
PROCEDURE SENDTOEMAILFROMBUFFER AS
v_From
VARCHAR2(80) := '[email protected]';
v_Recipient1 VARCHAR2(80) := '[email protected]';
v_Recipient2 VARCHAR2(80) := '[email protected]';
v_Recipient3 VARCHAR2(80) := '[email protected]';
v_Recipient4 VARCHAR2(80) := '[email protected]';
v_Subject VARCHAR2(80) := 'Buffer LINE3';
v_Mail_Host VARCHAR2(30) := 'arsmtp.arcelik.com';
v_Mail_Conn utl_smtp.Connection;
crlf
VARCHAR2(2) := chr(13)||chr(10);
v_count VARCHAR2(30);
v_count1 VARCHAR2(30);
BEGIN
select count(*) into v_count from sortingbufferl3 where STATUS=9;
select count(*) into v_count1 from sortingbufferl3 where STATUS=-4;
v_Mail_Conn := utl_smtp.Open_Connection(v_Mail_Host, 25);
utl_smtp.Helo(v_Mail_Conn, v_Mail_Host);
utl_smtp.Mail(v_Mail_Conn, v_From);
utl_smtp.Rcpt(v_Mail_Conn, v_Recipient1);
utl_smtp.Rcpt(v_Mail_Conn, v_Recipient2);
utl_smtp.Rcpt(v_Mail_Conn, v_Recipient3);

utl_smtp.Rcpt(v_Mail_Conn, v_Recipient4);
utl_smtp.Data(v_Mail_Conn,
'Date: ' || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || crlf ||
'From: ' || v_From || crlf ||
'Subject: '|| v_Subject || crlf ||
'To: '
|| v_Recipient1 || crlf ||
'To: '
|| v_Recipient2 || crlf ||
'To: '
|| v_Recipient3 || crlf ||
'To: '
|| v_Recipient4 || crlf ||
crlf ||
'Number of records from Buffer LINE3 and LINE6 with'|| crlf ||
-- Messa
ge body
''|| 'STATUS=9: '|| v_count|| crlf ||
''|| 'STATUS=-4: '|| v_count1|| crlf
--'more message text'|| crlf
);
utl_smtp.Quit(v_mail_conn);
EXCEPTION
WHEN utl_smtp.Transient_Error OR utl_smtp.Permanent_Error then
raise_application_error(-20000, 'Unable to send mail: '||sqlerrm);
NULL;
END SENDTOEMAILFROMBUFFER;
create or replace
PROCEDURE
"SHOWMEDOUBLE"(mARG IN NUMBER)
IS
m_PRODUCT
VARCHAR2(20);
m_SERIAL
VARCHAR2(20);
m_DOUBLE
NUMBER;
m_COUNT
NUMBER:=0;
CURSOR C1 IS select PRODUCT from SORTING.SORTINGHISTORY group by PRODUCT;
BEGIN
--select PRODUCT INTO m_PRODUCT from SORTING.SORTINGHISTORY group by PRO
DUCT;
DBMS_OUTPUT.ENABLE(10000000);
OPEN C1; -- open the cursor before fetching
LOOP
FETCH c1 INTO m_PRODUCT;
--select m_PRODUCT,m_SERIAL, m_DOUBLE from dual;
--DBMS_OUTPUT.PUT_LINE (m_PRODUCT || ',' || m_SERIAL || ',' ||
m_DOUBLE);
--DBMS_OUTPUT.PUT_LINE (m_PRODUCT);
--insert into SORTING.REPTBL VALUES(m_SERIAL,m_DOUBLE);
EXIT WHEN c1%NOTFOUND;
--DBMS_OUTPUT.PUT_LINE (nvl(m_PRODUCT,'') || ' AS PRODUCT');
--SELECT nvl(SERIAL,''),nvl(COUNT(*),0) into m_SERIAL,m_DOUBLE F
ROM SORTINGHISTORY WHERE PRODUCT=m_PRODUCT group by SERIAL HAVING COUNT(*)>1;
LOOP
SELECT SERIAL,nvl(COUNT(*),0) into m_SERIAL,m_DOUBLE FROM SO
RTINGHISTORY WHERE PRODUCT=m_PRODUCT group by SERIAL HAVING COUNT(*)>1;
EXIT WHEN m_SERIAL IS NULL;
--DBMS_OUTPUT.PUT_LINE (m_PRODUCT || ' ' || nvl(m_SERIAL,'')
|| ',' || nvl(m_DOUBLE,'') || ',' || m_COUNT);
insert into REPTBL1(PRODSERIAL,MCOUNT) VALUES (m_SERIAL,m_DO
UBLE);
--EXECUTE IMMEDIATE 'SELECT SERIAL,COUNT(*) into SORTING.REP
TBL1 FROM SORTINGHISTORY WHERE PRODUCT=' || m_PRODUCT || ' group by SERIAL HAVI
NG COUNT(*)>1';
m_COUNT:=m_COUNT+1;

END LOOP;
--insert into SORTING.REPTBL SELECT nvl(SERIAL,''),nvl(COUNT(*),
0) into m_SERIAL,m_DOUBLE FROM SORTINGHISTORY WHERE PRODUCT=m_PRODUCT group by P
RODUCT,SERIAL;
--IF m_SERIAL IS NOT NULL THEN
-EXECUTE IMMEDIATE 'SELECT SERIAL,COUNT(*) into SORTING.REP
TBL FROM SORTINGHISTORY WHERE PRODUCT=' || m_PRODUCT || ' group by SERIAL HAVING
COUNT(*)>1';
--END IF;
END LOOP;
CLOSE c1;
COMMIT;
END;

You might also like