SQL Technical Solutions2
SQL Technical Solutions2
sql
SELECT subj.Sem,
SUM(CASE WHEN s.Gender = 'M' THEN 1 ELSE 0 END) AS Male_Count,
SUM(CASE WHEN s.Gender = 'F' THEN 1 ELSE 0 END) AS Female_Count
FROM STUDENT s
JOIN MARKS m ON s.RegNo = m.RegNo
JOIN SUBJECT subj ON m.Subcode = subj.Subcode
GROUP BY subj.Sem
ORDER BY subj.Sem;
COMMIT;
DBMS_OUTPUT.PUT_LINE('Final marks calculated and updated successfully.');
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
/
sql
sql
v_count := v_count + 1;
v_total_marks := v_total_marks + NVL(rec.Finalmark, 0);
-- Print summary
DBMS_OUTPUT.PUT_LINE('-------------------------------------------');
DBMS_OUTPUT.PUT_LINE('Summary:');
DBMS_OUTPUT.PUT_LINE('Average Mark: ' || v_avg_mark);
DBMS_OUTPUT.PUT_LINE('Subjects with Outstanding performance: ' || v_outstanding);
DBMS_OUTPUT.PUT_LINE('Subjects with Average performance: ' || v_average);
DBMS_OUTPUT.PUT_LINE('Subjects with Weak performance: ' || v_weak);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Student with RegNo ' || p_regno || ' not found.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
/
8. Bank Table
Table Creation
sql
sql
sql
SELECT Cust_Name, Acc_No, Balance FROM Bank WHERE Balance > 1000;
sql
sql
sql
9. Account Table
Table Creation
sql
sql
sql
sql
Solution d) Display customers with balance < 1000
sql
FOR rec IN (
SELECT Account_Type,
COUNT(*) as Acct_Count,
SUM(Account_Balance) as Total_Balance,
ROUND(AVG(Account_Balance), 2) as Avg_Balance
FROM Account
WHERE Branch_Name = p_branch_name
GROUP BY Account_Type
) LOOP
DBMS_OUTPUT.PUT_LINE(RPAD(rec.Account_Type, 12) || ' | ' ||
LPAD(TO_CHAR(rec.Acct_Count), 5) || ' | ' ||
LPAD(TO_CHAR(rec.Total_Balance, '999,999.99'), 13) || ' | ' ||
LPAD(TO_CHAR(rec.Avg_Balance, '999,999.99'), 14));
END LOOP;
DBMS_OUTPUT.PUT_LINE('----------------------------------------------');
DBMS_OUTPUT.PUT_LINE('TOTAL | ' ||
LPAD(TO_CHAR(v_total_accts), 5) || ' | ' ||
LPAD(TO_CHAR(v_total_bal, '999,999.99'), 13) || ' | ');
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No accounts found for branch: ' || p_branch_name);
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found for branch: ' || p_branch_name);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
/
Table Creation
sql
sql
SELECT P_Name
FROM "ORDER"
WHERE P_COST >= 1000
ORDER BY P_Name;
sql
SELECT o.P_Name
FROM "ORDER" o
JOIN CUSTOMER c ON o.C_ID = c.C_ID
WHERE c.City = 'Delhi'
ORDER BY o.P_Name;
sql
RETURN v_total;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 0;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
RETURN -1;
END;
/
Table Creation
sql
CREATE TABLE SALESMAN (
Salesman_id NUMBER PRIMARY KEY,
Name VARCHAR2(100) NOT NULL,
City VARCHAR2(50),
Commission NUMBER(5,2) CHECK (Commission BETWEEN 0 AND 100)
);
INSERT INTO CUSTOMER VALUES (101, 'Tom Wilson', 'New York', 3, 1000);
INSERT INTO CUSTOMER VALUES (102, 'Sarah Davis', 'Chicago', 2, 1001);
INSERT INTO CUSTOMER VALUES (103, 'James Taylor', 'London', 3, 1002);
INSERT INTO CUSTOMER VALUES (104, 'Lisa Anderson', 'Paris', 4, 1003);
INSERT INTO CUSTOMER VALUES (105, 'Mark Thompson', 'New York', 2, 1000);
INSERT INTO CUSTOMER VALUES (106, 'Emily Clark', 'Chicago', 1, 1001);
INSERT INTO CUSTOMER VALUES (107, 'Michael Harris', 'London', 2, 1002);
INSERT INTO CUSTOMER VALUES (108, 'Jessica Martin', 'New York', 3, 1004);
INSERT INTO ORDERS VALUES (1, 1200.50, TO_DATE('10-JAN-2023', 'DD-MON-YYYY'), 101, 1000);
INSERT INTO ORDERS VALUES (2, 850.25, TO_DATE('15-JAN-2023', 'DD-MON-YYYY'), 102, 1001);
INSERT INTO ORDERS VALUES (3, 1500.75, TO_DATE('20-JAN-2023', 'DD-MON-YYYY'), 103, 1002);
INSERT INTO ORDERS VALUES (4, 975.00, TO_DATE('25-JAN-2023', 'DD-MON-YYYY'), 104, 1003);
INSERT INTO ORDERS VALUES (5, 2100.00, TO_DATE('05-FEB-2023', 'DD-MON-YYYY'), 105, 1000);
INSERT INTO ORDERS VALUES (6, 1350.50, TO_DATE('10-FEB-2023', 'DD-MON-YYYY'), 106, 1001);
INSERT INTO ORDERS VALUES (7, 500.25, TO_DATE('15-FEB-2023', 'DD-MON-YYYY'), 107, 1002);
INSERT INTO ORDERS VALUES (8, 3200.00, TO_DATE('20-FEB-2023', 'DD-MON-YYYY'), 108, 1004);
INSERT INTO ORDERS VALUES (9, 1800.75, TO_DATE('25-FEB-2023', 'DD-MON-YYYY'), 101, 1000);
INSERT INTO ORDERS VALUES (10, 950.50, TO_DATE('01-MAR-2023', 'DD-MON-YYYY'), 103, 1002);
sql
sql
sql
FOR acc IN (
SELECT *
FROM Bank_Account
WHERE Balance > 1000000
HAVING Account_Type = 'Savings' -- Example of HAVING clause
ORDER BY Balance DESC
) LOOP
DBMS_OUTPUT.PUT_LINE(acc.Account_No || ' | ' ||
acc.Customer_Name || ' | ' ||
TO_CHAR(acc.Balance, '999,999,999.99') || ' | ' ||
acc.Account_Type);
END LOOP;
END;
/