Kihagyás

2. gyakorlat

ZH

Nem lehet internetet használni, de minden gyak anyagát lehet.

Szekvencia

CREATE SEQUENCE seq1 
MINVALUE 1 MAXVALUE 100 INCREMENT BY 5
START WITH 20 CYCLE;
CREATE TABLE seq_test(
    num_seq number
);

INSERT INTO seq_test VALUES (seq1.nextval);
INSERT INTO seq_test VALUES (seq1.nextval);

SELECT * FROM seq_test;
-- 20, 25

Szerverek közötti kapcsolat (linkek)

Link létrehozása:

CREATE DATABASE LINK ullmandb CONNECT TO <felhasználónév> IDENTIFIED BY <jelszó> USING 'ullman.inf.elte.hu:1521/ullman';

Lekérdezés link szerint:

SELECT * FROM kotroczo.dolgozo@ullmandb d;

1. feladat

Kik azok a felhasználók, akiknek legalább 40 táblája van, de legfeljebb 37 indexük van.

3. feladat

Adjuk meg azon tábláknak nevét, amelyekben legalább 8 db dátum típusú oszlop van.

SELECT owner, table_name FROM dba_tab_columns WHERE data_type = 'DATE' GROUP BY (OWNER, TABLE_NAME) HAVING count(*) >= 8;

3. feladat - PLSQL

Írjunk meg egy PLSQL procedúrát, amelyik paraméterül kapott karakterlánc alapján kiírja azoknak a tábláknak a nevét és tulajdonosát, amelyek az adott karakterlánccal kezdődnek

(Ha a paraméter kisbetűs, akkor is működjön a procedúra)

CREATE OR REPLACE PROCEDURE tabler (a IN STRING) AS
    CURSOR k IS SELECT * FROM dba_tables WHERE table_name LIKE CONCAT(UPPER(a), '%');
    sor k%rowtype;
BEGIN
    FOR sor IN k LOOP
        dbms_output.put_line(sor.owner || ' ' || sor.table_name);
    END LOOP;
END;
/

DECLARE

BEGIN
tabler('dolg');
END;
/

4. feladat

melyek azok az az objektum típusok, amelyek tényleges tárolást igényelnek, vagyis tartoznak hozzá adatblokkok?

SELECT DISTINCT object_type FROM dba_objects WHERE data_object_id IS NOT NULL;

5. feladat

listázzátok ki azokat az objektum típusokat, amelyek nem igényelnek tárolást; nem tartoznak hozzá adatblokkok

SELECT DISTINCT object_type FROM dba_objects WHERE data_object_id IS NULL;

6. feladat

adjuk meg azoknak a tábláknak a nevét, amelyeknek az első és negyedik oszlopuk VARCHAR2 típusú

SELECT t.owner, t.table_name FROM dba_tables t, SYS.dba_tab_columns c1, SYS.dba_tab_columns c2 WHERE
t.owner = c1.owner AND t.table_name = c1.table_name AND c1.column_id = 1 AND
t.owner = c2.owner AND t.table_name = c2.table_name AND c2.column_id = 4 AND
c1.data_type = 'VARCHAR2' AND c2.data_type = 'VARCHAR2';