You are on page 1of 11

PL-SQL

Q-1
DECLARE
NUM1 NUMBER;
NUM2 NUMBER;
RES NUMBER;
BEGIN
NUM1 := :NUM1;
NUM2 := :NUM2;
RES := NUM1*NUM2;
DBMS_OUTPUT.PUT_LINE('MULTIPLICATION RESULT IS: '||TO_CHAR(RES));
END;

Q-2
DECLARE
NUM1 NUMBER;
NUM2 NUMBER;
NUM3 NUMBER;
MINM NUMBER;
BEGIN
NUM1 := :NUM1;
NUM2 := :NUM2;
NUM3 := :NUM3;
MINM := NUM1;
IF NUM2 < MINM THEN
MINM := NUM2;
END IF;
IF NUM3 < MINM THEN
MINM := NUM3;
END IF;
DBMS_OUTPUT.PUT_LINE('THE MIN NUMBER IS: '||TO_CHAR(MINM));
END;

Q-3
CREATE TABLE FAC(NUM NUMBER,FACT NUMBER);

DECLARE
NUMM NUMBER;
FACTR NUMBER;
X NUMBER;
BEGIN
NUMM := :NUMM;
X := 0;
FACTR := 1;
1
LOOP
X := X + 1;
FACTR := FACTR * X;
INSERT INTO FAC VALUES(X,FACTR);
EXIT WHEN X>=NUMM;
END LOOP;
END;

SELECT * FROM FAC;

Q-4
DECLARE
QTY SALES_ORDER_DETAILS.QTYORDERED%TYPE;
USERINPUT SALES_ORDER_DETAILS.ORDERNO%TYPE;
BEGIN
USERINPUT := :USERINPUT;
SELECT SUM(QTYORDERED) INTO QTY FROM SALES_ORDER_DETAILS WHERE PRODUCTNO = USERINPUT;
DBMS_OUTPUT.PUT_LINE('QTY ORDERED IS : '||TO_CHAR(QTY));
END;

SELECT PRODUCTNO,QTYORDERED FROM SALES_ORDER_DETAILS

DESC SALES_ORDER_DETAILS

Q-5
DECLARE
QTY SALES_ORDER_DETAILS.QTYORDERED%TYPE;
QTYHAVE PRODUCT_MASTER.QTYONHAND%TYPE;
UQTY SALES_ORDER_DETAILS.QTYORDERED%TYPE;
UORDERNO SALES_ORDER_DETAILS.ORDERNO%TYPE;
UPRODUCTNO PRODUCT_MASTER.PRODUCTNO%TYPE;
BEGIN
UQTY := :UQTY;
UORDERNO := :UORDERNO;
UPRODUCTNO := :UPRODUCTNO;
SELECT SUM(QTYORDERED) INTO QTY FROM SALES_ORDER_DETAILS WHERE ORDERNO= UORDERNO;
SELECT QTYONHAND INTO QTYHAVE FROM PRODUCT_MASTER WHERE PRODUCTNO = UPRODUCTNO;
IF QTY <= QTYHAVE THEN
UPDATE SALES_ORDER_DETAILS SET QTYORDERED = UQTY WHERE PRODUCTNO = UPRODUCTNO AND
ORDERNO = UORDERNO;
DBMS_OUTPUT.PUT_LINE('TRANSACTION COMPLETED');
END IF;
END;

SELECT ORDERNO,PRODUCTNO,QTYORDERED FROM SALES_ORDER_DETAILS

2
DELETE FROM SALES_ORDER_DETAILS
SELECT * FROM PRODUCT_MASTER
DESC SALES_ORDER_DETAILS

Q-6
DECLARE
USERINPUT CLIENT_MASTER.STATE%TYPE;
USERINFO CLIENT_MASTER%ROWTYPE;
BEGIN
USERINPUT := :USERINPUT;
SELECT * INTO USERINFO FROM CLIENT_MASTER WHERE STATE = USERINPUT;
DBMS_OUTPUT.PUT_LINE('CLIENT NUMBER: '||USERINFO.CLIENTNO);
DBMS_OUTPUT.PUT_LINE('CLIENT NAME: '||USERINFO.NAME);
DBMS_OUTPUT.PUT_LINE('CLIENT STATE: '||USERINFO.STATE);
DBMS_OUTPUT.PUT_LINE('CLIENT CITY: '||USERINFO.CITY);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('TOO MANY RECORDS MATCHES SAME NAME');
END;

Q-7
DECLARE
USERINPUT SALES_ORDER_DETAILS.PRODUCTNO%TYPE;
ERROR EXCEPTION;
PRAGMA EXCEPTION_INIT(ERROR,-2291);
BEGIN
USERINPUT := :USERINPUT;
UPDATE SALES_ORDER_DETAILS SET PRODUCTNO = USERINPUT WHERE ORDERNO = 'O19001' AND
PRODUCTNO = 'P00001';
EXCEPTION
WHEN ERROR THEN

DBMS_OUTPUT.PUT_LINE('FOREIGN KEY VIOLATION');


END;

3
Q-8
DECLARE
NUM NUMBER;
RES NUMBER;
ERROR EXCEPTION;
BEGIN
NUM := :NUM;
IF NUM >= 0 THEN
RES := SQRT(NUM);
DBMS_OUTPUT.PUT_LINE('THE SQUARE ROOT IS: '||TO_CHAR(RES));
ELSE
RAISE ERROR;
END IF;
EXCEPTION
WHEN ERROR THEN
DBMS_OUTPUT.PUT_LINE('YOU HAVE ENTERED NEGATIVE NUMBER!');
END;

Q-9
DECLARE
CURSOR CUR1 IS SELECT CLIENTNO,NAME,STATE FROM CLIENT_MASTER;
USERINPUT CLIENT_MASTER.STATE%TYPE;
CLTNO CLIENT_MASTER.CLIENTNO%TYPE;
CLTNM CLIENT_MASTER.NAME%TYPE;
CLTST CLIENT_MASTER.STATE%TYPE;
CT NUMBER;
BEGIN
USERINPUT := :USERINPUT;
CT := 0;
OPEN CUR1;
IF CUR1%ISOPEN THEN
LOOP
FETCH CUR1 INTO CLTNO,CLTNM,CLTST;
EXIT WHEN CUR1%NOTFOUND;
IF USERINPUT = CLTST THEN
DBMS_OUTPUT.PUT_LINE(CLTNO||' '||CLTNM);
CT := CT + 1;
END IF;
END LOOP;
IF CT = 0 THEN
DBMS_OUTPUT.PUT_LINE('THERE IS NO SUCH USER(S)!');
END IF;
ELSE
4
DBMS_OUTPUT.PUT_LINE('CURSOR CANNOT BE OPENED!');
END IF;
CLOSE CUR1;
END;

Q-10
SELECT CLIENTNO FROM CLIENT_MASTER WHERE CITY = 'Mumbai';
SELECT * FROM SALES_ORDER;

DECLARE
CURSOR CUR1 IS SELECT CLIENTNO FROM CLIENT_MASTER WHERE CITY = 'Mumbai';
CURSOR CUR2 IS SELECT CLIENTNO FROM SALES_ORDER FOR UPDATE;
CLTNO CLIENT_MASTER.CLIENTNO%TYPE;
ORDNO SALES_ORDER.CLIENTNO%TYPE;
FULFILLED SALES_ORDER.ORDERSTATUS%TYPE;
BEGIN
OPEN CUR1;
FULFILLED := 'Fulfilled';
IF CUR1%ISOPEN THEN
LOOP
FETCH CUR1 INTO CLTNO;
DBMS_OUTPUT.PUT_LINE(CLTNO||'-');
OPEN CUR2;
LOOP
FETCH CUR2 INTO ORDNO;
DBMS_OUTPUT.PUT_LINE(ORDNO||'--');
EXIT WHEN CUR2%NOTFOUND;
IF CLTNO = ORDNO THEN
UPDATE SALES_ORDER SET ORDERSTATUS = FULFILLED WHERE
CURRENT OF CUR2;
END IF;
END LOOP;
CLOSE CUR2;
EXIT WHEN CUR1%NOTFOUND;
END LOOP;
ELSE
DBMS_OUTPUT.PUT_LINE('CURSOR CANNOT BE OPENED!');
END IF;
CLOSE CUR1;
END;

Q-11
CREATE OR REPLACE FUNCTION DTD (DD IN DATE) RETURN VARCHAR2 AS
D VARCHAR2(10);
BEGIN

5
D := TO_CHAR(DD,'DAY');
RETURN D;
END;

SELECT DTD(TO_DATE('07/04/1993','DD/MM/YYYY')) FROM DUAL;

CREATE OR REPLACE PROCEDURE PDTD (DD IN DATE, D OUT VARCHAR2) IS


BEGIN
D := TO_CHAR(DD,'DAY');
END;

Q-12
CREATE OR REPLACE FUNCTION SUMNUM (NUM1 IN NUMBER,NUM2 IN NUMBER) RETURN NUMBER IS
RES NUMBER := 0;
BEGIN
RES := NUM1+NUM2;
RETURN RES;
END;

CREATE OR REPLACE FUNCTION SUBSTRNUM (NUM1 IN NUMBER,NUM2 IN NUMBER) RETURN NUMBER IS


RES NUMBER := 0;
BEGIN
RES := NUM1-NUM2;
RETURN RES;
END;

CREATE OR REPLACE FUNCTION MULTNUM (NUM1 IN NUMBER,NUM2 IN NUMBER) RETURN NUMBER IS


RES NUMBER := 0;
BEGIN
RES := NUM1*NUM2;
RETURN RES;
END;

CREATE OR REPLACE FUNCTION DIVNUM (NUM1 IN NUMBER,NUM2 IN NUMBER) RETURN NUMBER IS


RES NUMBER := 0;
BEGIN
IF NUM2 <> 0 THEN
RES := NUM1/NUM2;
ELSE
RAISE_APPLICATION_ERROR(-20001,'CANNOT DIVIDE BY ZERO');
END IF;
RETURN RES;
END;

SELECT SUMNUM(2,3) FROM DUAL;


SELECT SUBSTRNUM(2,3) FROM DUAL;
6
SELECT MULTNUM(2,3) FROM DUAL;
SELECT DIVNUM(2,0) FROM DUAL;

Q-13
CREATE OR REPLACE FUNCTION PRIMENUMB(NUM IN NUMBER) RETURN NUMBER IS
RES NUMBER := -1;
C NUMBER := 0;
BEGIN
FOR N IN 2..NUM/2
LOOP
IF MOD(NUM,N) = 0 THEN
C := 0;
RES := 0;
EXIT;
ELSE
C := 1;
RES := 1;
END IF;
END LOOP;
RETURN RES;
END;

DECLARE
N NUMBER;
R NUMBER;
BEGIN
N:=:N;
R := PRIMENUMB(N);
IF R = 0 THEN
DBMS_OUTPUT.PUT_LINE(N||' IS NOT A PRIME NUMBER!');
ELSE
DBMS_OUTPUT.PUT_LINE(N||' IS A PRIME NUMBER.');
END IF;
END;

Q-14
DECLARE
CURSOR CUR1 IS SELECT ORDERDATE,DELYDATE FROM SALES_ORDER;
ORDDT SALES_ORDER.ORDERDATE%TYPE;
DLDT SALES_ORDER.DELYDATE%TYPE;
DIFF NUMBER;
BEGIN
OPEN CUR1;
IF CUR1%ISOPEN THEN
LOOP

7
FETCH CUR1 INTO ORDDT,DLDT;
DIFF := TO_DATE(DLDT)-TO_DATE(ORDDT);
DBMS_OUTPUT.PUT_LINE(DIFF);
EXIT WHEN CUR1%NOTFOUND;
END LOOP;
END IF;
CLOSE CUR1;
END;

Q-15
DROP FUNCTION DTD;
DROP FUNCTION SUMNUM;
DROP FUNCTION SUBSTRNUM;
DROP FUNCTION MULTNUM;
DROP FUNCTION DIVNUM;
DROP PROCEDURE PRIMENUMB;

Q-16
CREATE OR REPLACE TRIGGER SODTRG BEFORE INSERT ON SALES_ORDER_DETAILS FOR EACH ROW
DECLARE
QTYON PRODUCT_MASTER.QTYONHAND%TYPE;
QTYORD SALES_ORDER_DETAILS.QTYORDERED%TYPE;
BEGIN
SELECT QTYONHAND INTO QTYON FROM PRODUCT_MASTER WHERE PRODUCTNO =:NEW.PRODUCTNO;
QTYORD := :NEW.QTYORDERED;
IF QTYORD > QTYON THEN
RAISE_APPLICATION_ERROR(-20002,'QTYONHAND IS LESS THAN OTYORDERED');
END IF;
END;

INSERT INTO SALES_ORDER_DETAILS VALUES ('O19001','P0345',200,10,500);


SELECT * FROM SALES_ORDER_DETAILS;
SELECT * FROM PRODUCT_MASTER;

Q-17
CREATE TABLE DEPART(DNO NUMBER, DNAME VARCHAR2(10));
INSERT INTO DEPART VALUES(1,'IT');
INSERT INTO DEPART VALUES(2,'SCIENCE');
INSERT INTO DEPART VALUES(3,'PHYSICS');

CREATE OR REPLACE TRIGGER CHKTRG BEFORE INSERT OR UPDATE ON DEPART FOR EACH ROW
DECLARE
CURSOR CUR1 IS SELECT DNO,DNAME FROM DEPART;
ANYDT CUR1%ROWTYPE;
CHK VARCHAR2(4) := 'N';
8
BEGIN
OPEN CUR1;
LOOP
FETCH CUR1 INTO ANYDT;
EXIT WHEN CUR1%NOTFOUND;
IF ANYDT.DNO <> :NEW.DNO AND ANYDT.DNAME <> :NEW.DNAME THEN
CHK := 'Y';
END IF;
IF CHK <> 'Y' THEN
RAISE_APPLICATION_ERROR(-20003,'YOU HAVE ENTERED SUCH DATA!');
END IF;
CHK := 'N';
END LOOP;
CLOSE CUR1;
END;

INSERT INTO DEPART VALUES(4,'IT');


INSERT INTO DEPART VALUES(3,'MATH');
DELETE FROM DEPART WHERE DNAME = 'MATH'
SELECT * FROM DEPART;

Q-18
select * from sales_order
alter table sales_order add CITYCHANGE VARCHAR2(4);

CREATE OR REPLACE TRIGGER SOTRG BEFORE UPDATE OF CITY ON CLIENT_MASTER FOR EACH ROW
BEGIN
UPDATE SALES_ORDER S SET S.CITYCHANGE = 'Y' WHERE S.CLIENTNO = :OLD.CLIENTNO;
END;

SELECT * FROM CLIENT_MASTER


SELECT * FROM SALES_ORDER
UPDATE CLIENT_MASTER SET CITY = 'PETRO' WHERE CLIENTNO = 'C00001';

Q-19
DROP TRIGGER CHKTRG;
DROP TRIGGER SOTRG;
DROP TRIGGER SODTRG;

9
INDEX, VIEW, GRANT

1.1 CREATE INDEX IND_STATE ON CLIENT_MASTER(STATE)


1.2 CREATE INDEX IND_DESCRIPTION ON CLIENT_MASTER(IND_DESCRIPTION)
1.3 CREATE UNIQUE INDEX IND_COMP ON SALES_ORDER_DETAILS(PRODUCTNO,ORDERNO)
1.4 SELECT ROWID,ORDERNO FROM SALES_ORDER
1.5 DROP INDEX IND_DESCRIPTION
DROP INDEX IND_COMP
DROP INDEX IND_STATE

2.1 CREATE VIEW VIEW_PRODUCT_MASTER AS SELECT PRODUCTNO,DESCRIPTION FROM


PRODUCT_MASTER
2.2 CREATE VIEW VIEW_SALESMAN_MASTER AS SELECT SALESMANNO,SALAMT,CITY,REMARKS FROM
SALESMAN_MASTER WHERE SALAMT<=3000
2.3 CREATE VIEW PS AS SELECT * FROM PRODUCT_MASTER P, SALES_ORDER_DETAILS S WHERE
P.PPRODUCT=S.PRODUCTNO
ALTER TABLE PRODUCT_MASTER RENAME COLUMN PRODUCTNO TO PPRODUCT
2.4 UPDATE PS SET QTYORDERED = 5 WHERE PRODUCTNO = 'P07868'
2.5 DELETE FROM PS WHERE DESCRIPTION = 'Trousers'

3.1 CREATE ROLE ALROLE


GRANT ALL ON SALES_ORDER_DETAILS TO ALROLE
3.2 CREATE USER MAMTA IDENTIFIED BY MAMTA
GRANT CREATE SESSION TO MAMTA
3.3 GRANT SELECT ON PRODUCT_MASTER TO MAMTA WITH GRANT OPTION
GRANT SELECT ON CLIENT_MASTER TO MAMTA WITH GRANT OPTION
3.4 CREATE USER BILL IDENTIFIED BY BILL
GRANT CREATE SESSION TO BILL
GRANT SELECT ON PRODUCT_MASTER TO BILL
GRANT SELECT ON CLIENT_MASTER TO BILL
3.5 CREATE USER IVAN IDENTIFIED BY IVAN
GRANT CREATE SESSION TO IVAN
GRANT ALROLE TO IVAN
3.6 REVOKE ALL ON PRODUCT_MASTER FROM MAMTA
REVOKE ALL ON CLIENT_MASTER FROM MAMTA
3.7 DROP ROLE ALROLE
3.8 DROP USER IVAN
DROP USER BILL
DROP USER MAMTA

10
Contents
PL-SQL .................................................................................................................................................................................................................. 1
Q-1 .................................................................................................................................................................................................................. 1
Q-2 .................................................................................................................................................................................................................. 1
Q-3 .................................................................................................................................................................................................................. 1
Q-4 .................................................................................................................................................................................................................. 2
Q-5 .................................................................................................................................................................................................................. 2
Q-6 .................................................................................................................................................................................................................. 3
Q-7 .................................................................................................................................................................................................................. 3
Q-8 .................................................................................................................................................................................................................. 4
Q-9 .................................................................................................................................................................................................................. 4
Q-10 ................................................................................................................................................................................................................ 5
Q-11 ................................................................................................................................................................................................................ 5
Q-12 ................................................................................................................................................................................................................ 6
Q-13 ................................................................................................................................................................................................................ 7
Q-14 ................................................................................................................................................................................................................ 7
Q-15 ................................................................................................................................................................................................................ 8
Q-16 ................................................................................................................................................................................................................ 8
Q-17 ................................................................................................................................................................................................................ 8
Q-18 ................................................................................................................................................................................................................ 9
Q-19 ................................................................................................................................................................................................................ 9
INDEX, VIEW, GRANT ......................................................................................................................................................................................... 10
1.1 ................................................................................................................................................................................................................. 10
1.2 ................................................................................................................................................................................................................. 10
1.3 ................................................................................................................................................................................................................. 10
1.4 ................................................................................................................................................................................................................. 10
1.5 ................................................................................................................................................................................................................. 10
2.1 ................................................................................................................................................................................................................. 10
2.2 ................................................................................................................................................................................................................. 10
2.3 ................................................................................................................................................................................................................. 10
2.4 ................................................................................................................................................................................................................. 10
2.5 ................................................................................................................................................................................................................. 10
3.1 ................................................................................................................................................................................................................. 10
3.2 ................................................................................................................................................................................................................. 10
3.3 ................................................................................................................................................................................................................. 10
3.4 ................................................................................................................................................................................................................. 10
3.5 ................................................................................................................................................................................................................. 10
3.6 ................................................................................................................................................................................................................. 10
3.7 ................................................................................................................................................................................................................. 10
3.8 ................................................................................................................................................................................................................. 10

11

You might also like