-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcomposite.sql
More file actions
50 lines (48 loc) · 1.38 KB
/
composite.sql
File metadata and controls
50 lines (48 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
CREATE TABLE PRIME(num NUMBER PRIMARY KEY);
CREATE TABLE COMPOSITE(num NUMBER PRIMARY KEY);
SET SERVEROUTPUT ON;
SET VERIFY OFF;
DECLARE
num NUMBER;
prime_count NUMBER := 0;
composite_count NUMBER := 0;
i NUMBER := 2;
v_prime BOOLEAN;
FUNCTION ISPRIME(num NUMBER) RETURN BOOLEAN IS
BEGIN
IF num < 2 THEN
RETURN FALSE;
END IF;
FOR j IN 2..TRUNC(SQRT(num)) LOOP
IF MOD(num, j) = 0 THEN
RETURN FALSE;
END IF;
END LOOP;
RETURN TRUE;
END;
BEGIN
num := &user_input;
WHILE prime_count < num OR composite_count < num LOOP
v_prime := ISPRIME(i);
IF v_prime AND prime_count < num THEN
INSERT INTO PRIME VALUES(i);
prime_count := prime_count + 1;
ELSIF NOT v_prime AND composite_count < num THEN
INSERT INTO COMPOSITE VALUES(i);
composite_count := composite_count + 1;
END IF;
i := i + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Prime Numbers:');
FOR rec IN (SELECT * FROM PRIME) LOOP
DBMS_OUTPUT.PUT_LINE(rec.num);
END LOOP;
DBMS_OUTPUT.PUT_LINE('Composite Numbers:');
FOR rec IN (SELECT * FROM COMPOSITE) LOOP
DBMS_OUTPUT.PUT_LINE(rec.num);
END LOOP;
END;
/
DROP TABLE PRIME;
DROP TABLE COMPOSITE;