Modifikace sysdate v Oracle SQL

Oracle funkce sysdate vrací aktuální datum a čas databáze. Používá například při zjišťování, zda daný záznam je platný či ne.

SELECT * FROM tabulka WHERE datum < sysdate

Často ale potřebujeme zjistit záznam, který je např. starší než aktuální datum plus/mínus X dní/hodin/minut/… Pokud napíšeme:

SELECT SYSDATE, SYSDATE - 60 FROM dual;

bude výsledek následující:

SYSDATE                SYSDATE-60
12.07.17 11:22:36      13.05.17 11:22:36

To je docela nepřehledné, protože ne každý může vědět, že se odečítají dny. Mnohem lepší je:

SELECT SYSDATE, SYSDATE - INTERVAL '60' DAY AS sysdate_minus_60_days FROM dual;

který vrací stejný výsledek, ale je mnohem jasnější, jaká časová hodnota se modifikuje (INTERVAL ’60‘ DAY):

SYSDATE                SYSDATE_MINUS_60_DAYS
12.07.17 11:25:00      13.05.17 11:25:00

Je samozřejmě možné přidávat a odebírat nejen dny, ale i jiné časové úseky (second, minute, hour, day, month, year).

SELECT SYSDATE, SYSDATE + INTERVAL '5' MINUTE AS sysdate_plus_5_minutess FROM dual;

Výsledek

SYSDATE                SYSDATE_PLUS_5_MINUTES
12.07.17 11:26:34      12.07.17 11:31:34

Zjištění expirace hesla v Oracle databázi

V případě, že se na Oracle databázi připojujete pomocí zadání uživatelského jména a hesla, můžete si jednoduchým dotazem zjistit datum expirace hesla.

SELECT username, expiry_date FROM user_users;

Pohled (View) user_users popisuje aktuálního uživatele. Struktura view je následující.

descr user_users;

Name                        Null     Type             
--------------------------- -------- ---------------- 
USERNAME                    NOT NULL VARCHAR2(128)    
USER_ID                     NOT NULL NUMBER           
ACCOUNT_STATUS              NOT NULL VARCHAR2(32)     
LOCK_DATE                            DATE             
EXPIRY_DATE                          DATE             
DEFAULT_TABLESPACE          NOT NULL VARCHAR2(30)     
TEMPORARY_TABLESPACE        NOT NULL VARCHAR2(30)     
CREATED                     NOT NULL DATE             
INITIAL_RSRC_CONSUMER_GROUP          VARCHAR2(128)    
EXTERNAL_NAME                        VARCHAR2(4000)   
PROXY_ONLY_CONNECT                   VARCHAR2(1 CHAR) 
COMMON                               VARCHAR2(3 CHAR) 
ORACLE_MAINTAINED                    VARCHAR2(1 CHAR) 

Soubor nenalezen – chyba při instalaci Oracle 12c

Instalace Oracle 12c se skládá ze dvou soborů. V instrukcích pro instalaci databáze je uvedeno, že je třeba oba soubory rozbalit do stejné složky. Tím ale autor myslí následující:

Všechna data z
...\winx64_12102_database_2of2\database\stage\Components
překopírovat do
...\winx64_12102_database_1of2\database\stage\Components

V případě, že tak neučiníte, instalace se spustí, ale po nějaké době se vám zobrazí chybové okno.

oracle_12c_instalace_chyba_file_not_found

Instalace Oracle 12c na Windows

V tomto příspěvku ukážu krok za krokem instalaci Oracle 12c Enterprise Editiona na Windows 10. Nejdříve je třeba z této stránky stáhnou dva zazipované soubory. K tomu je potřeba mít účet u Oracle (registrace je bezplatná) a přihlásit se (a samozřejmě souhlasit s licenčními podmínkami). Pro instalaci Oracle databáze 12c na Windows 10 je třeba použít minimálně verzi 12.1.0.2.

winx64_12102_database_1of2
winx64_12102_database_2of2

Oba stažené soubory je třeba rozbalit do stejného adresáře. To v tomto případě znamená rozbalit první zip (winx64_12102_database_1of2) a z rozbaleného druhého zipu (winx64_12102_database_2of2) překopírovat všechna data z ...\winx64_12102_database_2of2\database\stage\Components  do ...\winx64_12102_database_1of2\database\stage\Components. Pokud toto neprovedete, instalaci sice budete moci spustit, ale nebude úspěšná.

V ...\winx64_12102_database_1of2\database naleznete soubor setup.exe. Spusťe jej jako správce.

Oracle12c_instalace_01

Pokud nevyplníte email dostanete následující upozornění. Klikněte na „Yes“ pro pokračování.

Oracle12c_instalace_02

Zvolte vytvoření databáze.

Oracle12c_instalace_03

Zvolte desktop.

Oracle12c_instalace_04

Můžete vytvořit nového uživatele, použít existujícího či použít svůj Windows účet.

Oracle12c_instalace_05

Pokud zvolíte „User Windows Built-in Account, zobrazí se vám následující upozornění. Klikněte na „Yes“ pro pokračování.

Oracle12c_instalace_06

Zde je potřeba zadat heslo pro administraci.  To musí splňovat určitá kritéria, takže vám to nedovolí zadat zcela triviální heslo.

Tip: Pokud kliknete do textového pole, zobrazí se vám u něj ikona žárovičky. Když na ni nejedete myší, získáte podrobnější informace, týkající se daného textového pole.

Oracle12c_instalace_07

Zkontrolují se nastavení.

Oracle12c_instalace_08

A zobrazí se přehled změn. Pokud potvrdíte, začne instalace.

Oracle12c_instalace_09 Oracle12c_instalace_10 Oracle12c_instalace_11

Toto okno vás informuje o tom, že kromě účtů SYS a SYSTEM, jsou všechna ostatní zamčené. Pokud kliknete na „Password Management“, můžete je odemknout.

Oracle12c_instalace_12

Zde můžete odemknout jednotlivé účty.

Oracle12c_instalace_13

Databáze byla úspěšně nainstalována.

Oracle12c_instalace_14


Zdroje:

ROWNUM v Oracle

ROWNUM není skutečný sloupec, ale pseudo sloupec, který je k dispozici v dotazu. ROWNUM je číslo od jedničky po N, kde N je počet záznamů vrácených dotazem a toto číslo je přidáno záznamu ještě předtím, než proběhne část ORDER BY. ROWNUM je pouze dočasné číslo. ROWNUM je navýšeno teprve poté, co je přiřazeno záznamu a vyhodnocena podmínka v WHERE části.

select * from table_name where rownum > 1

Nevrátí žádný záznam. První zázname má ROWNUM 1. Vyhodnocení WHERE ROWNUM > 1 je tedy false. ROWNUM se nenavýší a tím pádem tato podmínka nebude nikdy splněna.

select * from table_name where rownum >= 1

Vrátí všechny záznamy.

select * from table_name where rownum < 5

Vrátí první 4 záznamy.

select t.*, rownum from table_name t order by t.column_name

Nejdříve přiřadí ROWNUM jednotlivým řádkům a teprve poté seřadí výstup. Je pravděpodobné, že ROWNUM budou rozházená a případná podmínka WHERE ROWNUM < cislo by vrátila sice správný počet záznamů, ale neseřazeně. Řešením je následující select.

select rownum, t.* from (
 select * from table_name order by column_name) t
where rownum <= 5

Vrátí prvních pět výsledků dle řazení.

Pomocí ROWNUM je možné výsledek dotazu stránkovat, avšak je třeba použít ještě jeden select.

select * from (
  select rownum as cisla_radku, t.* from (
    select * from table_name order by column_name) t
  )
where cisla_radku between 10 and 15;

Vrátí desátý až patnáctý záznam (dle řazení) včetně. Podmínku WHERE je možné samozřejmě použít i ve vnořeném selectu.

select * from (
  select rownum as cisla_radku, t.* from (
    select * 
    from table_name
    where nejaka_podminka 
    order by column_name) t
  )
where cisla_radku between 10 and 15;

Zdroje: