Az Oracle adatbáziskezelőjének legújabb verziója hamarosan érkezik. Az Oracle eközben folyamatosan publikálja a várható újdonságok egy részét. Most ezek közül mutatnánk be pár olyan SQL fejlesztést, amit mi nagyon izgalmasnak találtunk.
Update parancs közvetlen kötéssel
Tábla update során másik táblából eddig csak alselecttel tudtuk megoldani az értékek töltését. Mostantól egyetlen UPDATE paranccsal a forrás tábla megadható és az oszlopok megfeleltethetőek egymással. Kiindulásként fogjuk a jól ismert EMP, DEPT táblákat és adjuk hozzá a DEPT_NAME oszlopot, ami a department name mezőt jelenti. Ekkor az új mező feltöltése a DEPT táblából a következő módon lehetséges:
SQL> alter table emp add(dept_name varchar2(30));
Table altered.
SQL> update emp e
set dept_name = d.dname
from dept d
where e.deptno = d.deptno;
14 rows updated.
SQL> select empno, ename, job, dept_name from emp where rownum < 6;
EMPNO ENAME JOB DEPT_NAME
---------- ---------- --------- --------------
7839 KING PRESIDENT ACCOUNTING
7698 BLAKE MANAGER SALES
7782 CLARK MANAGER ACCOUNTING
7566 JONES MANAGER RESEARCH
7788 SCOTT ANALYST RESEARCH
SQL>
Delete parancs közvetlen kötéssel
Az UPDATE-hez hasonlóan a törlés is elvégezhető közvetlenül egy tábla összekapcsolásával. Feladatunk az EMP táblából azon sorok törlése, ahol az adott department DALLAS-ban található. Ezt az információt a DEPT tábla LOC mezője tartalmazza, így azt tudjuk felhasználni a szűréshez:
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPT_NAME
------ ---------- --------- ---- --------- ----- ------- ------- --------------
7839 KING PRESIDENT 17-NOV-81 5000 10 ACCOUNTING
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 SALES
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 ACCOUNTING
7566 JONES MANAGER 7839 02-APR-81 2975 20 RESEARCH
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 RESEARCH
7902 FORD ANALYST 7566 03-DEC-81 3000 20 RESEARCH
7369 SMITH CLERK 7902 17-DEC-80 800 20 RESEARCH
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 SALES
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 SALES
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 SALES
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 SALES
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 RESEARCH
7900 JAMES CLERK 7698 03-DEC-81 950 30 SALES
7934 MILLER CLERK 7782 23-JAN-82 1300 10 ACCOUNTING
14 rows selected.
SQL> delete from emp e
from dept d
where e.deptno=d.deptno
and d.loc='DALLAS';
5 rows deleted.
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPT_NAME
------ ---------- --------- ---- --------- ----- ------ ------- --------------
7839 KING PRESIDENT 17-NOV-81 5000 10 ACCOUNTING
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 SALES
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 ACCOUNTING
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 SALES
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 SALES
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 SALES
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 SALES
7900 JAMES CLERK 7698 03-DEC-81 950 30 SALES
7934 MILLER CLERK 7782 23-JAN-82 1300 10 ACCOUNTING
9 rows selected.
SQL>
IF [NOT] EXISTS szintaxis támogatás
Tábla létrehozásakor eddig probléma volt, hogy ha a tábla már létezett, akkor hibaüzenetet kaptunk. Ezért létrehozás előtt valamilyen módszerrel vizsgálni kellett a helyzetet. Most ezt kényelmesen, a kiterjesztett CREATE TABLE paranccsal megtehetjük IF EXISTS / IF NOT EXISTS záradék használatával:
SQL> create table if not exists xx1(name varchar2(200),value number);
Table created.
A szintaxis DROP TABLE esetén is működik:
SQL> drop table if exists xx1;
Table dropped.
GROUP BY oszlop másodlagos név
A GROUP BY záradék egy nagyon hasznos lehetőséggel bővült: használhatóak a SELECT részben megadott aliasok, nem kell az eredeti mező neveket használni:
SQL> select d.deptno department, count(*)
from emp e, dept d
where e.deptno=d.deptno
group by department;
DEPARTMENT COUNT(*)
---------- ----------
10 3
30 6
20 5
A másodlagos név a HAVING záradékban is használható.
Multivalue INSERT utasítás
A multivalue insert egy újabb kényelmi extra az új verzióban. Több sort eddig egyesével, vagy alselecttel tudtunk beszúrni, mostanáig. A VALUES részben, vesszővel elválasztva, lehetőségünk nyílik több sor megadására:
SQL> insert into DEPT (DEPTNO, DNAME, LOC) values
(10, 'ACCOUNTING', 'NEW YORK'),
(20, 'RESEARCH', 'DALLAS'),
(30, 'SALES', 'CHICAGO'),
(40, 'OPERATIONS', 'BOSTON');
4 rows created.
Opcionális FROM záradék
A FROM záradék mostantól opcionális. Ezt más adatbáziskezelők eddig is tudták, a 23c-től felfele pedig már az Oracle is támogatja, még jobb kompatibilitást biztosítva így sql szinten az egyéb rendszerekkel. A FROM DUAL záradék elhagyható a következő kifejezés használható ezentúl:
SQL> select 1 col1, 2 col2 union
select 1,3 union
select 1,3 union
select 2,1 union
select 3,1
;
COL1 COL2
---------- ----------
1 2
1 3
2 1
3 1
Az Oracle 23c adatbáziskezelő OCI (Oracle Cloud) platformon 2023 szeptemberétől elérhető. Egyéb verziói csak később jelennek meg, várhatóan 2024 első félévében. Addig is letölthető egy ún. Fejlesztői (Developer) ingyenes verzió, amivel a 23c újdonságai kipróbálhatók.