Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 5.04 KB | None | 0 0
  1.   p_email            IN VARCHAR2,
  2.   p_projID           IN INTEGER,
  3.   p_quantity         IN INTEGER,
  4.   p_amount           IN NUMBER
  5.    )
  6. IS
  7.   ex_ERROR            EXCEPTION;
  8.   lv_errorMsg_txt     VARCHAR(100);
  9.   lv_donationid       INTEGER;
  10.   lv_shoppingcartid   INTEGER;
  11.   lv_donorid          INTEGER;
  12.   lv_ischecked        INTEGER;
  13.  
  14.  
  15.   lv_cartcount        INTEGER;
  16.   lv_donorcount       INTEGER;
  17.   lv_projectcount     INTEGER;
  18.   lv_donationcount    INTEGER;
  19.  
  20.   lv_projectstatus    VARCHAR(100);
  21.  
  22.   CURSOR cur_isChecked IS
  23.     SELECT isChecked
  24.     FROM GG_DONATION
  25.     WHERE DONOR_ID = lv_donorid;
  26.   CURSOR cur_donationid IS
  27.     SELECT donation_transactionID
  28.     FROM GG_DONATION
  29.     WHERE DONOR_ID = lv_donorid;
  30.  
  31. BEGIN
  32.  
  33.  
  34.   -- Checking that parameters are provided.
  35.   IF p_projID IS NULL THEN
  36.     lv_errorMsg_txt :=  'Please specify a project ID.';
  37.     RAISE ex_ERROR;
  38.   ELSIF p_email IS NULL THEN
  39.     lv_errorMsg_txt := 'Please enter an email.';
  40.     RAISE ex_ERROR;
  41.   ELSIF p_quantity IS NULL THEN
  42.     lv_errorMsg_txt :=  'You must specify a donation quantity.';
  43.     RAISE ex_ERROR;
  44.   ELSIF (p_amount <= 0) THEN
  45.     lv_errorMsg_txt := 'You must enter an amount greater than 0.';
  46.     RAISE ex_ERROR;
  47.   ELSIF (p_quantity <= 0) THEN
  48.    lv_errorMsg_txt := 'You must enter a quantity greater than 0.';
  49.    RAISE ex_ERROR;
  50.  
  51.   END IF;
  52.  
  53.   -- Checking if there is a donor with the specified email address.
  54.   SELECT COUNT(donor_id) INTO lv_donorcount
  55.   FROM GG_DONOR
  56.   WHERE GG_DONOR.donor_email = p_email;
  57.       IF lv_donorcount = 0 THEN
  58.         lv_errorMsg_txt := 'The email-address was not found in the database.';
  59.         RAISE ex_ERROR;
  60.       END IF;
  61.  
  62.   -- Checking if there is a project with the specified project id.
  63.   SELECT COUNT(project_id) INTO lv_projectcount
  64.   FROM GG_PROJECT
  65.   WHERE GG_PROJECT.project_id = p_projID;
  66.       IF lv_projectcount = 0 THEN
  67.         lv_errorMsg_txt := 'There is no project with the specified project ID.';
  68.         RAISE ex_ERROR;
  69.       END IF;
  70.    
  71.   -- Checking if the status is retired.
  72.   SELECT project_status INTO lv_projectstatus
  73.   FROM GG_PROJECT
  74.   WHERE GG_PROJECT.project_id = p_projID;
  75.       IF lv_projectstatus = 'retired' THEN
  76.         lv_errorMsg_txt := 'The project is retired and you can no longer donate.';
  77.         RAISE ex_ERROR;
  78.       END IF;
  79.  
  80.   -- Get the donor id from the supplied email.
  81.   SELECT GG_DONOR.donor_id
  82.   INTO lv_donorid
  83.   FROM GG_DONOR
  84.   WHERE GG_DONOR.donor_email = p_email;
  85.  
  86.   -- Checking if there are any donations for the donor. Need this to determine
  87.   -- if the donor has an open transaction or not.
  88.   SELECT COUNT(donation_transactionID)
  89.   INTO lv_donationcount
  90.   FROM GG_DONATION
  91.   WHERE DONOR_ID = lv_donorid;
  92.   DBMS_OUTPUT.PUT_LINE('Donations: ' || lv_donationcount);
  93.  
  94.   OPEN cur_isChecked;
  95.   OPEN cur_donationid;
  96.     LOOP
  97.       FETCH cur_isChecked INTO lv_ischecked;
  98.       DBMS_OUTPUT.PUT_LINE('lv_ischecked: ' || lv_ischecked);
  99.       FETCH cur_donationid INTO lv_donationid;
  100.       DBMS_OUTPUT.PUT_LINE('lv_donationid ' || lv_donationid);
  101.       --EXIT WHEN cur_isChecked%NOTFOUND;
  102.       --EXIT WHEN cur_donationid%NOTFOUND;
  103.      
  104.       IF lv_ischecked IS NULL OR lv_ischecked = 1 THEN
  105.           lv_donationid := DONATION_SEQ.NEXTVAL;
  106.          
  107.       DBMS_OUTPUT.PUT_LINE('lv_donationid ' || lv_donationid);
  108.           INSERT INTO GG_DONATION(
  109.             donation_transactionID,
  110.             donation_date,
  111.             donor_id
  112.             )
  113.             VALUES (
  114.             lv_donationid,
  115.             SYSDATE,
  116.             lv_donorid
  117.             );
  118.             DBMS_OUTPUT.PUT_LINE('-- Added donation.');
  119.            
  120.           INSERT INTO GG_DONATIONDETAIL(
  121.             donation_transactionID,
  122.             project_id,
  123.             donationdetail_amount,
  124.             donationdetail_qty,
  125.             donationdetail_extAmount
  126.             )
  127.             VALUES (
  128.             lv_donationid,
  129.             p_projID,
  130.             p_amount,
  131.             p_quantity,
  132.             p_amount
  133.             );
  134.            
  135.             EXIT;
  136.            
  137.        ELSIF lv_donationcount > 0 AND lv_ischecked = 0 THEN
  138.             INSERT INTO GG_DONATIONDETAIL(
  139.             donation_transactionID,
  140.             project_id,
  141.             donationdetail_amount,
  142.             donationdetail_qty,
  143.             donationdetail_extAmount
  144.             )
  145.             VALUES (
  146.             lv_donationid,
  147.             p_projID,
  148.             p_amount,
  149.             p_quantity,
  150.             p_amount
  151.             );
  152.             EXIT;
  153.          
  154.       END IF;
  155.     END LOOP;
  156.   CLOSE cur_donationid;
  157.   CLOSE cur_isChecked;  
  158.    
  159.   COMMIT;
  160.  
  161.   DBMS_OUTPUT.PUT_LINE('Donation with ID: ' || lv_donationID ||
  162.                   ' added to shopping cart of Donor: ' || lv_donorID );
  163.  
  164.   EXCEPTION
  165.     WHEN ex_ERROR THEN DBMS_OUTPUT.PUT_LINE(lv_errorMsg_txt);
  166.     ROLLBACK;
  167.   WHEN OTHERS THEN
  168.     DBMS_OUTPUT.PUT_LINE('An error occurred.');
  169.     DBMS_OUTPUT.PUT_LINE('Error code:     ' ||  SQLCODE);
  170.     DBMS_OUTPUT.PUT_LINE('Error message: '  ||  SQLERRM);
  171.     ROLLBACK;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement