1. Write a simple PL/SQL program printing the output as “QUEST SOFTWARE”
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.PUT_LINE ('QUEST SOFTWARE');
END;
2. Write a simple PL/SQL program declaring a variable called Q as string, assign the value “QUEST SOFTWARE” to that variable and print that variable
VARIABLE Q VARCHAR2 (50)
BEGIN
: Q: ='QUEST SOFTWARE';
END;
/
PRINT Q
3. Write a pl/sql to declare variables and use it in solving the following equations.
a. f=b^2 – 4*a*c
b. q=(34*45)/(12+10)
SET SERVEROUTPUT ON
DECLARE
A NUMBER (4,2): = 1;
B NUMBER (4,2): = 3;
C NUMBER (4,2): = 2;
F NUMBER (4,2);
Q NUMBER (4,2);
BEGIN
Q: = (B*B)-(4*A*C);
F: = (34*45)/(12+10);
DBMS_OUTPUT.PUT_LINE ('THE VALUE OF F IS 'Q);
DBMS_OUTPUT.PUT_LINE ('THE VALUE OF F IS 'F);
END;
4. Write a simple PL/SQL program for FIBANOCCI series. Get the value for N using ‘&’ variable.
SET SERVEROUTPUT ON
DECLARE
A NUMBER(4) :=0;
B NUMBER (4) :=1;
C NUMBER(4);
LIMIT NUMBER(4):=&ENTER_LIMIT;
BEGIN
DBMS_OUTPUT.PUT_LINE('0');
DBMS_OUTPUT.PUT_LINE('1');
FOR I IN 1..LIMIT-2 LOOP
C: =A+B;
A:=B;
B:=C;
DBMS_OUTPUT.PUT_LINE (TO_CHAR(C));
END LOOP;
END;
5. To find the reverse the number and string.
To reverse the number
DECLARE
I INT;
N INT;
PREV INT;
BEGIN
PREV: = 0;
N: = &TEMP;
WHILE N > 0
LOOP
I: = MOD (N, 10);
PREV: = PREV * 10 + I;
` N := FLOOR(N/10);
END LOOP;
DBMS_OUTPUT.PUT_LINE (PREV);
END;
/* To reverse the string */
SET SERVEROUTPUT ON
DECLARE
SST VARCHAR2 (30);
ST VARCHAR2 (30): = '&1';
N NUMBER (4);
J VARCHAR (3);
BEGIN
N: = LENGTH (ST);
FOR I IN REVERSE 1..N
LOOP
J: = SUBSTR (ST, I, 1);
SST: = SSTJ;
END LOOP;
DBMS_OUTPUT.PUT_LINE (SST);
END;
6. Write a PL/SQL, which updates the commission to 500 for employees who get salary less than 5000;(use table EMP) and commit it;
BEGIN
UPDATE EMP
SET COMM=500
WHERE SAL < 5000;
COMMIT;
END;
7. Write a PL/SQL that deletes the rows from the table EMP where ENAME is SCOTT;
BEGIN
DELETE EMP
WHERE ENAME LIKE 'SCOTT';
END;
8. Write a PL/SQL program to select mark values (mark1, mark2, mark3) from the marks table, calculate the total, average (of the marks) and insert the resultant values into appropriate columns for the table.
Use table student
Stuno
stname
Mark1
Mark2
Mark3 total avg remark
1.if the average < 40 update the remark column as FAIL
2.if the average >= 40 and <= 50 then update the remark column as 3’rd class
3.if average >=50 and <60 then update the remark column as ‘2’nd class
4.if average >60 then update the remark as “1’st class”
DECLARE
CURSOR STU IS
SELECT MARK1, MARK2, MARK3
FROM STUDENT;
AV STUDENT.AVGE%TYPE;
TOTA STUDENT.TOTAL%TYPE;
REMA STUDENT.REMARK%TYPE;
I NUMBER (2):=0;
BEGIN
FOR STUREC IN STU LOOP
I:=I+1;
TOTA:=STUREC.MARK1+STUREC.MARK2+STUREC.MARK3;
AV:=(TOTA/3);
IF (AV < 40) THEN
REMA:= 'FAIL';
ELSIF (AV>=40 AND AV<50) THEN
REMA:= '3 RD CLASS';
ELSIF (AV>=50 AND AV<60) THEN
REMA:= '2 ND CLASS';
ELSE
REMA:= 'I ST CLASS';
END IF;
UPDATE STUDENT
SET TOTAL=TOTA
WHERE STUNO=I;
UPDATE STUDENT
SET AVGE=AV
WHERE STUNO=I;
UPDATE STUDENT
SET REMARK=REMA
WHERE STUNO=I;
END LOOP;
END;
9. Using a simple PL/SQL program do the following
a. Insert into table student a row and mark it a save point A.
b. Delete rows from the table where total<200 and mark it as save point B.
c. Now undo the previous deletion and commit the values.
BEGIN
INSERT INTO STUDENT
VALUES(9,'SAMY',78,89,56,NULL,NULL,NULL);
SAVEPOINT A;
DELETE FROM STUDENT
WHERE TOTAL<200;
SAVEPOINT B;
ROLLBACK TO SAVEPOINT A;
COMMIT;
END;
10. Write a pl/sql to insert a row into the table student and commit the same in the pl/sql block itself.
BEGIN
INSERT INTO STUDENT
VALUES (10,'SSAMY', 8,89,56,NULL, NULL, NULL);
COMMIT;
END;
11.write a PL/SQL using while loop for the following
a. Declare variables J and I.
b. Until the I <=100 increment I by 2 and J by 1.
c. Print the value of J.
SET SERVEROUTPUT ON
DECLARE
J NUMBER (3) :=0;
I NUMBER (3) :=0;
BEGIN
WHILE (I<=100) LOOP
I := I+2;
J := J+1;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(J));
END LOOP;
END;
12. Create a table TEMP with two columns COL1 and message insert into the table temp 10 times in the following format
COL1 MESSAGE
---- -------
2. “I will not sleep in the office”
3. “I will not sleep in the office”
4. .
CREATE TABLE TEMP
(COL NUMBER (3), MESSAGES VARCHAR2 (30));
BEGIN
FOR I IN 1..10 LOOP
INSERT INTO TEMP
VALUES (I,'I WILL NOT SLEEP IN THE OFFICE');
END LOOP;
END;
13. Write a PL/SQL program to create a multiplication table:
SET SERVEROUTPUT ON
SET VERIFY OFF
SET FEEDBACK OFF
DECLARE
CTR NUMBER(2):=1;
VALUE NUMBER(2);
TERMS NUMBER(2);
PDT NUMBER;
BEGIN
VALUE:=&VALUE;
TERMS:=&TERMS;
DBMS_OUTPUT.PUT_LINE ('MULTIPLICATION TABLE');
WHILE CTR<=TERMS
LOOP
PDT:=VALUE*CTR;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(VALUE)'*'
TO_CHAR(CTR) '='TO_CHAR(PDT));
CTR:=CTR+1;
END LOOP;
END;
14. Write a PL/SQL program for finding the sum of digits.
SET SERVEROUTPUT ON
SET VERIFY OFF
SET FEEDBACK OFF
DECLARE
ANUM NUMBER: =&ENTER_NUMBER;
A NUMBER (2):=0;
B NUMBER(2):=0;
BEGIN
WHILE (ANUM !=0) LOOP
A:=MOD(ANUM,10);
B:=A+B;
ANUM := FLOOR(ANUM/10);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('THE SUM OF DIGITS IS'' 'TO_CHAR (B));
END;
15. How do I get the system date and time over DBLINK?
You cannot use SYSDATE or USER, to get the SYSDATE, USER over DBLINK due to a known restriction with these functions. For this, you can use the following workaround:
Step-1:
On the remote machine, populate a table with the SYSDATE, USER and values using a stored procedure on the remote machine.
CREATE TABLE db_table (mydate DATE);
CREATE OR REPLACE PROCEDURE db_date
as mydate date;
BEGIN
DELETE FROM db_table;
SELECT SYSDATE
INTO mydate
FROM DUAL;
INSERT INTO db_table
VALUES (mydate);
END;
Step-2:
On local machine, select the data from the table, which has been populated using the stored procedure.
EXECUTE db_date@dblink
SELECT mydate FROM db_table@dblink;
16. Write a simple PL/SQL program which calls a procedure to check if a particular employee gets commission or not. If the commission is not null and >0 then the message should display
“COMISSION PAID”
CREATE OR REPLACE PROCEDURE CHECKCOMM (EMPNO IN NUMBER)
AS
COMM NUMBER (3):=0;
BEGIN
SELECT COMMISSION_PCT
INTO COMM
FROM EMPLOYEES
WHERE EMPLOYEE_ID=EMPNO;
IF (COMM IS NOT NULL AND COMM >0) THEN
DBMS_OUTPUT.PUT_LINE ('COMMISSION PAID');
ELSE
DBMS_OUTPUT.PUT_LINE ('NO COMMISSION PAID');
END IF;
END CHECKCOMM;
17. Write a procedure naming it “RAISE_SALARY” which increases the salary of the employee by 10% and raises a predefined exception if there is no data in the salary column.
CREATE OR REPLACE PROCEDURE RAISE_SALARY(EMPNO IN NUMBER)
AS
SAL EMPLOYEES.SALARY%TYPE;
BEGIN
SELECT SALARY
INTO SAL
FROM EMPLOYEES
WHERE EMPLOYEE_ID=EMPNO AND SAL IS NOT NULL;
SAL: = SAL*1.1;
DBMS_OUTPUT.PUT_LINE (TO_CHAR (SAL));
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('THERE IS NO SAL FOR THIS EMPLOYEE');
END;
SET FEEDBACK OFF;
EXEC RAISE_SALARY (101);
18. Write a PL/SQL program calling a function which checks whether the current day is working or not .If it is then the programs displays the output as “WORKING DAY” else “HOLIDAY”.
Note: holiday (Saturday and Sunday)
Function:
CREATE OR REPLACE FUNCTION CHECKDAY (DAY1 IN VARCHAR2)
RETURN BOOLEAN
AS
BEGIN
IF (DAY1='SATURDAY'OR DAY1='SUNDAY') THEN
RETURN (TRUE);
ELSE
RETURN (FALSE);
END IF;
END;
PL/SQL Program:
DECLARE
A BOOLEAN;
DAY0 VARCHAR2 (23);
BEGIN
SELECT TO_CHAR(SYSDATE,'DAY')
INTO DAY0
FROM DUAL;
A:=CHECKDAY(DAY0);
IF A THEN
DBMS_OUTPUT.PUT_LINE('HOLIDAY');
ELSE
DBMS_OUTPUT.PUT_LINE('WORKING DAY');
END IF;
END;
19. How does one loop through tables in PL/SQL?
Look at the following nested loop code example.
DECLARE
CURSOR DEPT_CUR IS
SELECT DEPTNO
FROM DEPT
ORDER BY DEPTNO;
-- EMPLOYEE CURSOR ALL EMPLOYEES FOR A DEPT NUMBER
CURSOR EMP_CUR (V_DEPT_NO DEPT.DEPTNO%TYPE) IS
SELECT ENAME
FROM EMP
WHERE DEPTNO = V_DEPT_NO;
BEGIN
FOR DEPT_REC IN DEPT_CUR LOOP
DBMS_OUTPUT.PUT_LINE ('EMPLOYEES IN DEPARTMENT
'TO_CHAR (DEPT_REC.DEPTNO));
FOR EMP_REC IN EMP_CUR(DEPT_REC.DEPTNO) LOOP
DBMS_OUTPUT.PUT_LINE('...EMPLOYEE IS 'EMP_REC.ENAME);
END LOOP;
END LOOP;
END;
20. Write a simple PL/SQL using cursor and do the below mentioned operation.
Declare the variables sal_limit number(4);
my_name emp.ename%type;
my_sal emp.sal%type;
A. Get all the ENAME and SAL from the EMP table into the cursor which are all below
the sal_limit=2000;
B. Fetch those values into variables.
C. Insert those values into a table called as NEW_TABLE, which should have only two
columns (my_ENAME,my_ENO).
DECLARE
SAL_LIMIT NUMBER (4) := &1;
MY_NAME EMP.ENAME%TYPE;
MY_SAL EMP.SAL%TYPE;
CURSOR EMPS IS
SELECT ENAME, SAL
FROM EMP
WHERE SAL
OPEN EMPS;
LOOP
FETCH EMPS INTO MY_NAME, MY_SAL;
EXIT WHEN EMPS%NOTFOUND;
INSERT INTO TEMP1
VALUES (MY_NAME, MY_SAL);
END LOOP;
END;
21. Get the “n” from the operator, using an “&” variable using cursor FOR LOOP write a PL/SQL
to get the name and salary of the top ‘n’ salaries. People from the EMP table and store them in
the table called TEMP.
DECLARE
CURSOR TOP IS
SELECT ENAME,SAL
FROM EMP
ORDER BY SAL DESC;
N NUMBER :=&ENTER_LIMIT;
S EMP.SAL%TYPE;
NAME EMP.ENAME%TYPE;
BEGIN
OPEN TOP;
FOR I IN 1..N LOOP
FETCH TOP INTO NAME,S;
INSERT INTO TEMP1
VALUES(NAME,S);
END LOOP;
END;
22. What will the following anonymous PL/SQL will return?
BEGIN
SELECT ENAME
FROM EMP
WHERE ENO = &E_NO;
END;
It will return error, because there is no column in the EMP table like ENO. And also there Is no into clause in the program.
23. Write a pl/sql program selecting rows from the EMP table which have the SALARY >=10,000.
If there are no rows in the table then raise an USER DEFINED EXCEPTION Giving an error “NONE GETS THIS SALARY”.
DECLARE
NAME EMP.ENAME%TYPE;
BEGIN
SELECT ENAME
INTO NAME
FROM EMP
WHERE SAL>=10000;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR (-20999,'NONE GETS THIS SALARY');
END;
24. Write a PL/SQL program to select the rows from the EMP table having salary<2000, when the
Query returns more than 1 ROW as a result then raise a predefined exception printing the result
“QUERY RETURNS MORE THAN ONE ROW”
DECLARE
NAME EMP.SAL%TYPE;
BEGIN
SELECT ENAME
INTO NAME
FROM EMP
WHERE SAL<2000;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
RAISE_APPLICATION_ERROR(-20645,'QUERY RETURNS MORE THAN ONE ROW');
END;
25. Write a PL/SQL block to accept a number and print all its divisors.
SET SERVEROUTPUT ON
SET FEEDBACK OFF
SET VERIFY OFF
DECLARE
N NUMBER (4) :=&ENTER_NUMBER;
A NUMBER (2);
BEGIN
FOR I IN 1..N LOOP
A:=MOD(N,I);
IF (A=0) THEN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(I));
END IF;
END LOOP;
END;
26. Write a PL/SQL block to accept values for NUM1 and NUM2 at run time. Store the remainder of NUM1 divided by NUM2 in a SQL*Plus host variable called RESULT. Check the contents of RESULT variable for correctness.
VARIABLE RESULT NUMBER
DECLARE
A NUMBER :=&1;
B NUMBER :=&2;
BEGIN
:RESULT := MOD(A,B);
END;
/
PRINT RESULT
For the exercises below you need to create the table OPERATIONS with the foll. Structure.
OPERATIONS TABLE
OPERATION
Varchar2(10)
ONTABLE
VARCHAR2(15)
OPERDATE
DATE
USERNAME
VARCHAR2(15)
REMARK
VARCHAR(30)
CREATE TABLE OPERATIONS(
OPERATION Varchar2(10),
ONTABLE VARCHAR2(15),
OPERDATE DATE,
USERNAME VARCHAR2(15),
REMARK VARCHAR(30));
28. Create a PL/SQL block, which accepts a customer number from the user and checks whether there are any rows matching the customer number in SALES table. Accordingly, PL/SQL inserts a row in an OPERATIONS table based on the following conditions : IF no rows are found, insert a row in OPERATIONS with a REMARK ‘No Rows found’ IF more than one rows are found, insert a row in OPERATIONS with a REMARK ‘Multiple Rows found’ IF one row is found, insert a row in OPERATIONS with a REMARK ‘One Row found’ For other columns insert appropriate values. USER pseudo column can be used for USERNAME column
DECLARE
NAME VARCHAR2(34);
N NUMBER := &ENTER_ID;
BEGIN
SELECT CUSTNAME
INTO NAME
FROM SALES
WHERE CUSTID=N;
INSERT INTO OPERATIONS
VALUES('SELECT','SALES',SYSDATE,USER,'ONE ROW FOUND');
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO OPERATIONS
VALUES ('SELECT','SALES', SYSDATE, USER,'NO ROWS FOUND');
WHEN TOO_MANY_ROWS THEN
INSERT INTO OPERATIONS
VALUES ('SELECT','SALES', SYSDATE, USER,'MANY ROWS FOUND');
END;
29. Create a trigger that audits an EMP table. A trigger inserts a row into the OPERATIONS table with appropriate values, whenever there is an insert, update or delete activity on EMP table
For e.g. If a user deletes rows from EMP table, the trigger should insert a row in the OPERATIONS table with following details
OPERATION DELETE
ONTABLE EMP
OPERDATE SYSDATE
USERNAME USER. (Pseudo-column)
CREATE OR REPLACE TRIGGER AUDITEMP
AFTER DELETE OR INSERT OR UPDATE ON EMP
BEGIN
IF DELETING THEN
INSERT INTO OPERATIONS
VALUES ('DELETE','EMP', SYSDATE, USER, NULL);
ELSIF INSERTING THEN
INSERT INTO OPERATIONS
VALUES ('INSERT','EMP', SYSDATE, USER, NULL);
ELSIF UPDATING THEN
INSERT INTO OPERATIONS
VALUES ('UPDATE','EMP', SYSDATE, USER, NULL);
END IF;
END;
30. Write a PL/SQL procedure SALARY_UPDATE that accepts an employee number and percentage by which salary is incremented for the employee. The procedure increments the salary of an employee in the EMP table and inserts a row with appropriate values in OPERATIONS table.
CREATE OR REPLACE PROCEDURE SALARY_UPDATE (E
EMP.EMPNO%TYPE, P NUMBER)
IS
BEGIN
UPDATE EMP
SET SAL=(SAL*(P/100))
WHERE EMPNO=E;
END;
In this procedure we are updating salary, before this we have created a trigger called AUDITEMP so if we update the EMP table this operation details are automatically inserted into the OPERATIONS table.
31. Write a trigger for restricting the transactions on Saturdays and Sundays.
CREATE OR REPLACE TRIGGER REST_TRANS
BEFORE INSERT OR UPDATE OR DELETE
ON EMP
FOR EACH ROW
DECLARE
V_DAY VARCHAR2 (10);
BEGIN
SELECT TO_CHAR (SYSDATE,'DY')
INTO V_DAY
FROM DUAL;
IF V_DAY = 'SAT' OR V_DAY = 'SUN' THEN
RAISE_APPLICATION_ERROR (-20001, 'TRANSACTION NOT
ALLOWED IN SATURDAY AND SUNDAY');
END IF;
END;
32. Write a stored procedure in back-end and call it in the front-end.
CREATE OR REPLACE PROCEDURE SAMPLE (ARG1 IN NUMBER,
ARG2 OUT NUMBER)
IS
BEGIN
ARG2: = ARG1 + 100;
END;
33. Write an anonymous PL/SQL block which will accept a table name of the current database and
display the number of records of that table.
SET SERVEROUTPUT ON
DECLARE
REC NUMBER(5) :=0;
BEGIN
SELECT COUNT(*)
INTO REC
FROM EMP;
DBMS_OUTPUT.PUT_LINE(REC);
END;
34. You have 'EMP' file, which says about sal, dept and grade of the employee. I want a PL/SQL
block which should accept a dept no and increase the salary of the employee by 8% if it is grade
I, by 6% if it is grade 2, by 4% if it is grade 3. How can I do that?
You can do this by the following block
BEGIN
UPDATE EMP
SET SAL =DECODE (GRADE, 1, (SAL*1.08),
2, (SAL*1.06),
3, (SAL*1.04)’
SAL)
WHERE DEPTNO=&1;
END;
35. What will the following anonymous PL/SQL will return?
BEGIN
SELECT ENAME
FROM EMP
WHERE ENO = &E_NO;
END;
It will return error, you need an 'into' clause for 'select' statement in PL/SQL block
36. To find the given number is perfect or not.
DECLARE
D NUMBER;
C NUMBER;
B NUMBER;
BEGIN
B:=&A;
D:=0;
FOR I IN 1..B-1
LOOP
C:=MOD(B,I);
IF C=0 THEN
D:=D+I;
END IF;
END LOOP;
IF D=B THEN
DBMS _OUTPUT.PUT_LINE ('PERFECT');
ELSE
DBMS_OUTPUT.PUT_LINE ('NOT PERFECT’)
END IF;
END;
37. Write a PL/SQL block to raise the salary of all the employees in department no. 20 by 0.05. whenever any such raise is given to the employees , a record for the same is maintained in the temp_raise table. It includes the emp no., date when the raise was given and the actual raise. Write a PL/SQL block to update the salary of each employee and insert a record in the emp_raise table.
But the raised salary should be within the following range.if the raised salary exceeds the range, you should give the error message with employee number and Job.
JOB MIN_SALARY MAX_SALARY
--- ---------- ----------
CLERK 2500 5000
SALESMAN 6000 8000
ANALYST 12000 16000
MANAGER 20000 25000
Temp Table : temp_raise
empno raise_date raise_amt
------- ---------- ---------
DECLARE
CURSOR C1 IS SELECT EMPNO,ENAME,DEPTNO,JOB,SAL FROM EMP WHERE DEPTNO=20;
V_EMPNO EMP.EMPNO%TYPE;
V_ENAME EMP.ENAME%TYPE;
V_DEPTNO EMP.DEPTNO%TYPE;
V_JOB EMP.JOB%TYPE;
V_SAL EMP.SAL%TYPE;
TOTALSAL EMP.SAL%TYPE;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO V_EMPNO,V_ENAME,V_DEPTNO,V_JOB,V_SAL;
EXIT WHEN C1%NOTFOUND;
TOTALSAL := V_SAL + ( V_SAL * 0.05);
IF V_JOB='CLERK' AND TOTALSAL BETWEEN 2500 AND 5000 THEN
UPDATE EMP SET SAL= TOTALSAL
WHERE EMPNO =V_EMPNO;
INSERT INTO TEMP_RAISE VALUES(V_EMPNO,SYSDATE, V_SAL * .05);
ELSIF V_JOB='SALESMAN' AND TOTALSAL BETWEEN 6000 AND 8000 THEN
UPDATE EMP SET SAL= TOTALSAL
WHERE EMPNO =V_EMPNO;
INSERT INTO TEMP_RAISE VALUES(V_EMPNO,SYSDATE, V_SAL * .05);
ELSIF V_JOB='ANALYST' AND TOTALSAL BETWEEN 12000 AND 16000 THEN
UPDATE EMP SET SAL= TOTALSAL
WHERE EMPNO =V_EMPNO;
INSERT INTO TEMP_RAISE VALUES(V_EMPNO,SYSDATE, V_SAL * .05);
ELSIF V_JOB='MANAGER' AND TOTALSAL BETWEEN 20000 AND 25000 THEN
UPDATE EMP SET SAL= TOTALSAL
WHERE EMPNO =V_EMPNO;
INSERT INTO TEMP_RAISE VALUES(V_EMPNO,SYSDATE, V_SAL * .05);
ELSE
DBMS_OUTPUT.PUT_LINE('SALARY OUT OF RANGE FOR EMPLOYEE NO : '
V_EMPNO ' AND JOB : 'V_JOB);
END IF;
END LOOP;
CLOSE C1;
END;
38. Write an anonymous PL/SQL block to print 1 - 1 time, 2 - 2 times ... 50 - 50 times.
SET SERVEROUTPUT ON
SET VERIFY OFF
DECLARE
N NUMBER: =&1;
BEGIN
FOR I IN 1..N LOOP
FOR J IN 1..I LOOP
DBMS_OUTPUT.PUT (I);
END LOOP;
DBMS_OUTPUT.NEW_LINE;
END LOOP;
END;
39. To generate the first three perfect numbers.
40. To generate and print the numbers like pyramid.
1
1 2 1
1 2 3 2 1
DECLARE
I INTEGER;
J INTEGER;
OUT_STRING VARCHAR2 (80);
N INTEGER;
BEGIN
OUT_STRING: = LPAD (OUT_STRING,' ', 1,39);
N := &TEMP;
FOR I IN 1..N
LOOP
FOR J IN 1..I
LOOP
OUT_STRING := OUTSTRING ' ';
END LOOP;
FOR J IN REVERSE 1 .. I -1
LOOP
OUT_STRING := OUT_STRING ' ';
END LOOP;
DBMS_OUTPUT.PUT_LINE(OUT_STRING);
END LOOP;
END;
No comments:
Post a Comment