Home » SQL & PL/SQL » SQL & PL/SQL » Maker-Checker in Oracle (Oracle 10g)
Maker-Checker in Oracle [message #629532] Wed, 10 December 2014 08:33 Go to next message
sss111ind
Messages: 634
Registered: April 2012
Location: India
Senior Member

Dear All,

How we can to maintain maker-checker concept using Pl/Sql.
http://en.wikipedia.org/wiki/Maker-checker

Regards,
Nathan
Re: Maker-Checker in Oracle [message #629534 is a reply to message #629532] Wed, 10 December 2014 08:42 Go to previous messageGo to next message
Michel Cadot
Messages: 68643
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

Yes, it may, now it depends on the complete specification of the workflow.

Re: Maker-Checker in Oracle [message #629535 is a reply to message #629534] Wed, 10 December 2014 08:45 Go to previous messageGo to next message
BlackSwan
Messages: 26766
Registered: January 2009
Location: SoCal
Senior Member
maker/checker is simply a design issue which cam be implemented in any procedural language.
Re: Maker-Checker in Oracle [message #629572 is a reply to message #629535] Thu, 11 December 2014 02:38 Go to previous messageGo to next message
sss111ind
Messages: 634
Registered: April 2012
Location: India
Senior Member

Could you please give some logic for implementation.
Re: Maker-Checker in Oracle [message #629573 is a reply to message #629572] Thu, 11 December 2014 02:41 Go to previous messageGo to next message
Michel Cadot
Messages: 68643
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

Can you explain us what is maker-checker concept for you.

Re: Maker-Checker in Oracle [message #629587 is a reply to message #629573] Thu, 11 December 2014 06:22 Go to previous message
sss111ind
Messages: 634
Registered: April 2012
Location: India
Senior Member


There are two separate procedures for managing emp and dept records.Whenever any new records created/updated/deleted
by the maker it should go for checkers reports. Based on checkers approval/rejection the effect will be captured.
This following procedure is for dept2 table the same can be made for emp table again. Can we apply in a single place and trigger is not
a solution for this also. Please help on this.

CREATE TABLE DEPT2 AS SELECT * FROM dept ;

ALTER TABLE dept2 ADD( status VARCHAR2(10),request VARCHAR2(10));

CREATE TABLE dept_backup AS SELECT  * FROM dept2 WHERE 1=2;

--already created data making status change
update dept2 set status='APPROVED',REQUEST='CREATE';


create or replace 
PROCEDURE Maker_checker_test(p_deptno  IN NUMBER, 
                             p_dname   IN VARCHAR2, 
                             p_loc     IN VARCHAR2, 
                             p_user    IN VARCHAR2,                                              
                             p_request IN VARCHAR2) 
IS 
  l_request VARCHAR2(10); 
BEGIN 
    IF p_user = 'MAKER' THEN 
      IF p_request = 'INSERT' THEN 
        INSERT INTO dept2 (deptno, dname, loc, status, request) --insert to master table
        VALUES      ( p_deptno, p_dname, p_loc, 'PENDING', p_request ); 
      ELSIF p_request = 'UPDATE' THEN 
        INSERT INTO dept_backup 
        SELECT deptno, p_dname, p_loc, status, p_request --insert to temp table with new values(visible for checker)
        FROM   dept2 
        WHERE  deptno = p_deptno; 

        UPDATE dept2 
        SET    status = 'PENDING', request = p_request  --update master table status for changes made
        WHERE  deptno = p_deptno; 
      ELSIF p_request = 'DELETE' THEN 
       
        UPDATE dept2 
        SET    status = 'PENDING', request = p_request --update master table status for changes made(visible for checker)
        WHERE  deptno = p_deptno; 
      END IF; 
    ELSE 
      SELECT request 
      INTO   l_request 
      FROM   dept2 
      WHERE  deptno = p_deptno 
             AND status = 'PENDING'; 

      IF p_request = 'APPROVED' THEN 
        IF l_request = 'INSERT' THEN 
          UPDATE dept2 
          SET    status = 'APPROVED'      --final approval for insertion
          WHERE  deptno = p_deptno; 
        ELSIF l_request = 'UPDATE' THEN 
          UPDATE dept2 t1 --loading temp table data to master table
          SET    ( dname, loc, status ) = (SELECT dname, loc, 'APPROVED' 
                                                    FROM   dept_backup t2 
                                                    WHERE  t1.deptno = t2.deptno AND t1.status = 'PENDING') where  t1.deptno = p_deptno ; 
        ELSIF l_request = 'DELETE' THEN 
         INSERT INTO dept_backup 
         SELECT deptno, p_dname, p_loc, p_request,request  --storing back up of master table
         FROM   dept2 
         WHERE  deptno = p_deptno; 

          DELETE FROM dept2   --delete from master table
          WHERE  deptno = p_deptno;        
        END IF; 
      ELSE 
        IF l_request = 'INSERT' THEN 
          INSERT INTO dept_backup    --inserting into temp table for backup
                      (deptno, dname, loc, status ,request)
          SELECT p_deptno, p_dname, p_loc, 'REJECTED' , request
          FROM   dept2 
          WHERE  deptno = p_deptno; 

          DELETE FROM dept2 --delete from master table
          WHERE  deptno = p_deptno; 
        ELSIF l_request = 'UPDATE' THEN --rejected the request
          UPDATE dept2  
          SET    status = 'REJECTED' 
          WHERE  deptno = p_deptno; 
        ELSIF l_request = 'DELETE' THEN --rejected the request
          UPDATE dept2 
          SET    status = 'REJECTED' 
          WHERE  deptno = p_deptno; 
        END IF; 
      END IF; 

      NULL; 
    END IF; 
END;

--testing
BEGIN
Maker_checker_test(50,'DEFENCE','FERGUSON','MAKER','INSERT');
Maker_checker_test(30,'FINANCE','CHICAGO','MAKER','UPDATE');
Maker_checker_test(40,'OPERATIONS','BOSTON','MAKER','DELETE');
Maker_checker_test(20,'RESEARCH','DALLAS','MAKER','DELETE');
Maker_checker_test(10,'ACCOUNTING','INDIANA','MAKER','UPDATE');
Maker_checker_test(60,'MEDICINE','MADISON','MAKER','INSERT');
end;


BEGIN
Maker_checker_test(50,'DEFENCE','FERGUSON','CHECKER','APPROVED');
Maker_checker_test(30,'FINANCE','CHICAGO','CHECKER','APPROVED');
Maker_checker_test(40,'OPERATIONS','BOSTON','CHECKER','REJECTED');
Maker_checker_test(20,'RESEARCH','DALLAS','CHECKER','APPROVED');
Maker_checker_test(10,'ACCOUNTING','NEW YORK','CHECKER','REJECTED');
Maker_checker_test(60,'MEDICINE','MADISON','CHECKER','REJECTED');
END;



Regards,
Nathan
Previous Topic: Capitalization of multiple words in one query
Next Topic: RAW TO HEX
Goto Forum:
  


Current Time: Tue Apr 23 16:52:18 CDT 2024