DatabaseManagementSystems/Practical/Assignment-A6/Queries-A6.md

109 lines
2.2 KiB
Markdown
Raw Normal View History

## Creating tables
`O_RollCall` table:
```sql
CREATE TABLE O_RollCall(
name VARCHAR(255),
roll NUMBER(14),
class VARCHAR(255)
);
```
`N_RollCall` table:
```sql
CREATE TABLE N_RollCall(
name VARCHAR(255),
roll NUMBER(14),
class VARCHAR(255)
);
```
## Inserting data
`O_RollCall` table:
```sql
INSERT INTO O_RollCall VALUES ('Stewie', 1, 'Comp 1');
INSERT INTO O_RollCall VALUES ('Edie', 2, 'Comp 2');
INSERT INTO O_RollCall VALUES ('Stomp', 3, 'Comp 3');
INSERT INTO O_RollCall VALUES ('Lara', 4, 'Comp 1');
INSERT INTO O_RollCall VALUES ('Foxy', 5, 'Comp 2');
```
`N_RollCall` table:
```sql
INSERT INTO N_RollCall VALUES ('Stewie', 1, 'Comp 1');
INSERT INTO N_RollCall VALUES ('Edie', 2, 'Comp 2');
INSERT INTO N_RollCall VALUES ('Stomp', 3, 'Comp 3');
INSERT INTO N_RollCall VALUES ('Lara', 4, 'Comp 1');
INSERT INTO N_RollCall VALUES ('Foxy', 5, 'Comp 2');
INSERT INTO N_RollCall VALUES ('Gundeti', 6, 'Comp 3');
INSERT INTO N_RollCall VALUES ('Kalas', 7, 'Comp 2');
```
## Procedure
### Explicit cursor
```sql
DECLARE
p_name VARCHAR(255);
p_rollno NUMBER(15);
p_class VARCHAR(255);
CURSOR cc1 IS SELECT * FROM N_RollCall WHERE roll NOT IN (SELECT roll FROM O_RollCall);
BEGIN
OPEN cc1;
LOOP
FETCH cc1 INTO p_name, p_rollno, p_class;
INSERT INTO O_RollCall VALUES (p_name, p_rollno, p_class);
EXIT WHEN cc1%notfound;
DBMS_OUTPUT.PUT_LINE(p_name || ' ' || p_rollno || ' ' || p_class);
END LOOP;
CLOSE cc1;
END;
/
```
### Parameterized cursor
```sql
DECLARE
p_name VARCHAR(255);
p_rollno NUMBER(15);
p_class VARCHAR(255);
CURSOR pp1(roll1 NUMBER) IS SELECT * FROM N_RollCall WHERE roll > roll1;
BEGIN
OPEN pp1(3);
LOOP
FETCH pp1 INTO p_name, p_rollno, p_class;
EXIT WHEN pp1%notfound;
DBMS_OUTPUT.PUT_LINE(p_name || ' ' || p_rollno || ' ' || p_class);
END LOOP;
CLOSE pp1;
END;
/
```
### Implicit Cursor
```sql
DECLARE
total_rows NUMBER(2);
BEGIN
UPDATE N_RollCall SET roll = roll + 1;
IF sql%notfound THEN
dbms_output.put_line('no roll was updated');
ELSIF sql%found THEN
total_rows := sql%rowcount;
DBMS_OUTPUT.PUT_LINE( total_rows || ' roll calls were affected ');
END IF;
END;
/
```