Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Exercitiul 2
SQL> create table Employee(
2 ID VARCHAR2(4 BYTE) NOT NULL,
3 First_Name VARCHAR2(10 BYTE),
4 Last_Name VARCHAR2(10 BYTE),
5 Start_Date DATE,
6 End_Date DATE,
7 Salary Number(8,2),
8 City VARCHAR2(10 BYTE),
9 Description VARCHAR2(15 BYTE)
10 )
11 /
Table created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
SQL>
SQL>
SQL>
SQL> -- display data in the table
SQL> select * from Employee
2 /
8 rows selected.
Exercitiul 3
SQL>
SQL>
SQL> declare
2 type month_va is varray(13) of VARCHAR2(20);
3 v_month_va month_va;
4 v_count_nr number;
5 begin
6
v_month_va:=month_va('January','February','March','April','May','June','July','August','Septem
ber','October','November','December');
7 DBMS_OUTPUT.put_line('Length:'||v_month_va.count);
8 v_month_va.extend;
10 v_month_va(v_month_va.last):='Null';
11 DBMS_OUTPUT.put_line('Length:'||v_month_va.count);
13 for i in v_month_va.first..v_month_va.last
14 loop
15 select count(*) into v_count_nr from employee
16 where nvl(replace(to_char(start_date,'Month'),' '), 'Null')=v_month_va(i);
17
18 DBMS_OUTPUT.put_line(v_month_va(i)||': '||v_count_nr);
19 end loop;
20 end;
21 /
Length:12
Length:13
January: 1
February: 0
March: 1
April: 0
May: 0
June: 0
July: 2
August: 0
September: 1
October: 1
November: 0
December: 2
Null: 0
SQL>
SQL>
SQL>
SQL> -- clean the table
SQL> drop table Employee
2 /
Table dropped.
Exercitiul 4
SQL> declare
2 type month_va is varray(13) of VARCHAR2(20);
3 v_month_va month_va;
4 v_count_nr number;
5 begin
6 v_month_va:=month_va('A','B','C','D','E','F','G');
7 DBMS_OUTPUT.put_line('Length:'||v_month_va.count);
8
9 for i in v_month_va.first..v_month_va.last
10 loop
11 DBMS_OUTPUT.put_line('v_month_va(i): '||v_month_va(i));
12 end loop;
13 end;
14 /
Length:7
v_month_va(i): A
v_month_va(i): B
v_month_va(i): C
v_month_va(i): D
v_month_va(i): E
v_month_va(i): F
v_month_va(i): G
count exists
exemplu 5
SQL>
SQL>
SQL> CREATE OR REPLACE TYPE mem_type IS VARRAY(10) of VARCHAR2(15)
2 /
Type created.
SQL>
SQL>
SQL> CREATE TABLE club (Name VARCHAR2(10),
2 Address VARCHAR2(20),
3 City VARCHAR2(20),
4 Phone VARCHAR2(8),
5 Members mem_type)
6 /
Table created.
SQL>
SQL>
SQL>
SQL> INSERT INTO club VALUES ('AL','111 First St.','Mobile',
2 '222-2222', mem_type('Brenda','Richard'));
1 row created.
SQL>
SQL> INSERT INTO club VALUES ('FL','222 Second St.','Orlando',
2 '333-3333', mem_type('Gen','John','Steph','JJ'));
1 row created.
SQL>
SQL>
SQL>
SQL> CREATE OR REPLACE PROCEDURE vartest IS
2 CURSOR fcur IS
3 SELECT city, members FROM club;
4 BEGIN
5 FOR j IN fcur LOOP
6 IF j.members.exists(1) THEN
7 dbms_output.put_line(j.City||' has '|| j.members.count||' members');
8
9 END IF;
10 END LOOP; /* end for j in fcur loop */
11 END vartest;
12 /
Procedure created.
Table dropped.
Type dropped.
SQL>
Exemplu 6
Exist last
EXISTS returns a Boolean that acknowledges the presence (T) or absence (F) of a
member of a VARRAY.
SQL>
SQL>
SQL> CREATE OR REPLACE TYPE mem_type IS VARRAY(10) of VARCHAR2(15)
2 /
Type created.
SQL>
SQL>
SQL> CREATE TABLE club (Name VARCHAR2(10),
2 Address VARCHAR2(20),
3 City VARCHAR2(20),
4 Phone VARCHAR2(8),
5 Members mem_type)
6 /
Table created.
SQL>
SQL>
SQL>
SQL> INSERT INTO club VALUES ('AL','111 First St.','Mobile',
2 '222-2222', mem_type('Brenda','Richard'));
1 row created.
SQL>
SQL> INSERT INTO club VALUES ('FL','222 Second St.','Orlando',
2 '333-3333', mem_type('Gen','John','Steph','JJ'));
1 row created.
SQL>
SQL>
SQL>
SQL> INSERT INTO club values ('NY','55 Fifth Ave.','NYC',
2 '999-9999',null)
3 SELECT *
4 FROM club
5
SQL>
SQL> CREATE OR REPLACE FUNCTION vs (vlist club.members%type, sub integer)
2 RETURN VARCHAR2
3 IS
4 BEGIN
5 IF vlist.exists(1) THEN
6 IF sub <= vlist.last THEN
7 RETURN vlist(sub);
8 ELSE
9 RETURN 'Less than '||sub||' members';
10 END IF;
11 ELSE
12 RETURN 'No members';
13 END IF;
14 END vs;
15 /
Function created.
SQL> ---The EXISTS function requires an argument to tell which element of the VARRAY is
referred to. In the above function we are saying in the coded if-statement that if there is no
first element, then return "No members." If a first member of the array is present, then the
array is not null and we can look for whichever member is sought (per the value of sub). If
the value of sub is less than the value of the last subscript, then the return of "'Less than '||
sub||' members'" is effected.
SQL>
SQL> SELECT c.name, vs(members,3) member_name
2 FROM club c;
NAME
----------
MEMBER_NAME
------------------------
AL
Less than 3 members
FL
Steph
SQL>
SQL> drop table club;
Table dropped.
Exemplu 8
Procedura pentru accesarea elementelor tabloului
SQL> CREATE OR REPLACE TYPE mem_type IS VARRAY(10) of VARCHAR2(15)
2 /
Type created.
SQL>
SQL>
SQL> CREATE TABLE club (Name VARCHAR2(10),
2 Address VARCHAR2(20),
3 City VARCHAR2(20),
4 Phone VARCHAR2(8),
5 Members mem_type)
6 /
Table created.
SQL>
SQL>
SQL>
SQL> INSERT INTO club VALUES ('AL','111 First St.','Mobile',
2 '222-2222', mem_type('Brenda','Richard'));
1 row created.
SQL>
SQL> INSERT INTO club VALUES ('FL','222 Second St.','Orlando',
2 '333-3333', mem_type('Gen','John','Steph','JJ'));
1 row created.
SQL>
SQL>
SQL> CREATE OR REPLACE FUNCTION vs (vlist club.members%type, sub integer)
2 RETURN VARCHAR2
3 IS
4 BEGIN
5 IF sub <= vlist.last THEN
6 RETURN vlist(sub);
7 END IF;
8 RETURN NULL;
9 END vs;
10 /
Function created.
SQL>
SQL> SELECT vs(members,2)
2 FROM club
3 /
VS(MEMBERS,2)
-----------------
Richard
John
DECODE(VS(MEMBERS,3),NULL,'NOMEMBERS',VS(MEMBERS,3))
----------------------------------------------------
Steph
SQL>
SQL>
SQL> drop table club;
Table dropped.
Type dropped.
SQL>