Files
DBI/Uebungszettel_9.sql
2025-02-13 14:58:45 +01:00

161 lines
3.6 KiB
SQL

--Aufgabe 1
--es wird ein Error geschmissen weil das Extend für das Varray fehlt
--Aufgabe 2
DECLARE
CURSOR city_cur IS
SELECT city
FROM zipcode
WHERE rownum <= 10;
TYPE city_type IS VARRAY(10) OF zipcode.city%TYPE;
city_varray city_type := city_type();
v_counter INTEGER := 0;
BEGIN
FOR city_rec IN city_cur LOOP
city_varray.Extend;
v_counter := v_counter + 1;
city_varray(v_counter) := city_rec.city;
DBMS_OUTPUT.PUT_LINE('city_varray('||v_counter||'): '||
city_varray(v_counter));
END LOOP;
END;
/
--Aufgabe 3
DECLARE
CURSOR city_cur IS
SELECT city
FROM zipcode
WHERE rownum <= 10;
TYPE city_type IS VARRAY(20) OF zipcode.city%TYPE;
city_varray city_type := city_type();
v_counter INTEGER := 0;
BEGIN
FOR city_rec IN city_cur LOOP
city_varray.Extend;
v_counter := v_counter + 1;
city_varray(v_counter) := city_rec.city;
DBMS_OUTPUT.PUT_LINE('city_varray('||v_counter||'): '||city_varray(v_counter));
END LOOP;
FOR i IN 1..10 LOOP
city_varray.EXTEND;
city_varray(10 + i) := city_varray(i);
DBMS_OUTPUT.PUT_LINE('city_varray('||(10 + i)||'): '||city_varray(10 + i));
END LOOP;
END;
/
--Aufgabe 4
DECLARE
TYPE table_type1 IS TABLE OF INTEGER
INDEX BY BINARY_INTEGER;
TYPE table_type2 IS TABLE OF TABLE_TYPE1
INDEX BY BINARY_INTEGER;
table_tab1 table_type1;
table_tab2 table_type2;
BEGIN
FOR i IN 1..2 LOOP
FOR j IN 1..3 LOOP
IF i = 1 THEN
table_tab1(j) := j;
ELSE
table_tab1(j) := 4 - j;
END IF;
table_tab2(i)(j) := table_tab1(j);
DBMS_OUTPUT.PUT_LINE ('table_tab2('||i||')('||j||'): '||
table_tab2(i)(j));
END LOOP;
END LOOP;
END;
/
--Es werden in die Zahlen ein bis drei und dann drei bis eins ausgegeben.
--Aufgabe 5
DECLARE
TYPE table_type1 IS TABLE OF INTEGER --associative array
INDEX BY BINARY_INTEGER;
TYPE table_type2 IS TABLE OF TABLE_TYPE1; --nested Table
table_tab1 table_type1;
table_tab2 table_type2 := table_type2();
counter Number(4) := 1;
BEGIN
FOR i IN 1..2 LOOP
FOR j IN 1..3 LOOP
IF i = 1 THEN
table_tab1(j) := j;
ELSE
table_tab1(j) := 4 - j;
END IF;
table_tab2.extend;
table_tab2(i)(j) := table_tab1(j);
DBMS_OUTPUT.PUT_LINE ('table_tab2('||i||')('||j||'): '||
table_tab2(i)(j));
END LOOP;
END LOOP;
END;
/
--Aufgabe 6
DECLARE
TYPE varray_type IS VARRAY(3) OF INTEGER;
TYPE nested_table_type IS TABLE OF varray_type;
nested_table nested_table_type := nested_table_type();
BEGIN
FOR i IN 1..2 LOOP
nested_table.EXTEND;
nested_table(i) := varray_type();
FOR j IN 1..3 LOOP
IF i = 1 THEN
nested_table(i).EXTEND;
nested_table(i)(j) := j;
ELSE
nested_table(i).EXTEND;
nested_table(i)(j) := 4 - j;
END IF;
DBMS_OUTPUT.PUT_LINE('nested_table(' || i || ')(' || j || '): ' || nested_table(i)(j));
END LOOP;
END LOOP;
END;
/
--Aufgabe 7
DECLARE
CURSOR c_instructor IS SELECT FIRST_NAME, LAST_NAME, SALUTATION FROM INSTRUCTOR;
TYPE type_instructor IS TABLE OF VARCHAR2(100)
INDEX BY BINARY_INTEGER;
instructor_varray type_instructor;
counter Number(10) := 0;
BEGIN
FOR rec_instructor IN c_instructor LOOP
counter := counter + 1;
instructor_varray(counter) := 'name(' || counter || '): ' || rec_instructor.SALUTATION || ' ' || rec_instructor.FIRST_NAME || ' ' || rec_instructor.LAST_NAME;
DBMS_OUTPUT.PUT_LINE(instructor_varray(counter));
END LOOP;
END;
/