Obsah

Tipy a poznámky k vývoji - Oracle

Oracle 19, PL/SQL i samotné SQL
Mrtvé linky prosím hlašte - ty o kterých vím a jde to nahrazuji pomocí Wayback Machine :)

GUID

Encode / decode do API formátů

Rekurzivní CTE

Obejití omezení funkce listagg()

Přehled grantů

Detaily konkrétního omezení

Dummy - proměnná bez hintů

Sekvence v selectu (ORA-08002, not yet defined in this session)

Hash

Insert a update najednou (merge)

Porovnání null hodnot

Automatické id / dosazení výchozího času

Jaké procesy Oracle využívají nejvíc CPU

Zamčené objekty

SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM, S.USERNAME, S.MACHINE, S.PORT, S.LOGON_TIME, SQ.SQL_FULLTEXT
  FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S, V$PROCESS P, V$SQL SQ
 WHERE L.OBJECT_ID = O.OBJECT_ID
   AND L.SESSION_ID = S.SID
   AND S.PADDR = P.ADDR
   AND S.SQL_ADDRESS = SQ.ADDRESS;

Odstranění komentářů regexepem (ungreedy volba)

Spuštění procedury ze skriptu

@echo off
sqlplus -s -l USER/pass@yourdb @yoursql.sql>your_log.LOG

Historie tabulek (Oracle Flashback)

ORA-27369 - job of type executable failed with exit code

Přehled trace logů a jejich umístění

SELECT s.sid, s.serial#, s.audsid, s.username, s.osuser, s.client_identifier, s.sql_trace, s.action, p.spid, p.tracefile
  FROM v$session s, v$process p
 WHERE s.paddr = p.addr
   AND s.username IS NOT NULL;

Rychlá kontrola zda kolekce obsahuje prvek (member of)

Kdo drží globální temporary table?

Implicitní konverze

ORA-06502: Číselná nebo hodnotová chyba

Toto funguje:

DECLARE
  x clob;
BEGIN
  FOR i IN 1 .. 8000
  LOOP
    x := x || i;
  END LOOP;
  dbms_output.put_line( LENGTH( x ) );
END;

Toto již nefunguje:

DECLARE
  x clob;
BEGIN
  FOR i IN 1 .. 9000 -- vede na více než 32767 znaků
  LOOP
    x := x || i;
  END LOOP;
  dbms_output.put_line( LENGTH( x ) );
END;

A toto opět funguje:

DECLARE
  x clob;
BEGIN
  FOR i IN 1 .. 9000
  LOOP
    x := x || TO_CHAR(i); -- explicitní konverze je ok
  END LOOP;
  dbms_output.put_line( LENGTH( x ) );
END;