abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 16:33 | Nová verze

    Svobodná historická realtimová strategie 0 A.D. (Wikipedie) byla vydána ve verzi 28 (0.28.0). Její kódový název je Boiorix. Představení novinek v poznámkách k vydání. Ke stažení také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Nová verze

    Multimediální server a user space API PipeWire (Wikipedie) poskytující PulseAudio, JACK, ALSA a GStreamer rozhraní byl vydán ve verzi 1.6.0 (Bluesky). Přehled novinek na GitLabu.

    Ladislav Hagara | Komentářů: 0
    včera 01:11 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-1.2 a 20.04 OTA-12.

    Ladislav Hagara | Komentářů: 0
    19.2. 18:00 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.0 otevřeného operačního systému pro chytré hodinky AsteroidOS (Wikipedie). Přehled novinek v oznámení o vydání a na YouTube.

    Ladislav Hagara | Komentářů: 1
    19.2. 16:00 | Zajímavý software

    WoWee je open-source klient pro MMORPG hru World of Warcraft, kompatibilní se základní verzí a rozšířeními The Burning Crusade a Wrath of the Lich King. Klient je napsaný v C++ a využívá vlastní OpenGL renderer, pro provoz vyžaduje modely, grafiku, hudbu, zvuky a další assety z originální kopie hry od Blizzardu. Zdrojový kód je na GitHubu, dostupný pod licencí MIT.

    NUKE GAZA! 🎆 | Komentářů: 6
    19.2. 13:33 | IT novinky

    Byl představen ICT Supply Chain Security Toolbox, společný nezávazný rámec EU pro posuzování a snižování kybernetických bezpečnostních rizik v ICT dodavatelských řetězcích. Toolbox identifikuje možné rizikové scénáře ovlivňující ICT dodavatelské řetězce a na jejich podkladě nabízí koordinovaná doporučení k hodnocení a mitigaci rizik. Doporučení se dotýkají mj. podpory multi-vendor strategií a snižování závislostí na vysoce

    … více »
    Ladislav Hagara | Komentářů: 4
    19.2. 12:22 | Humor

    Nizozemský ministr obrany Gijs Tuinman prohlásil, že je možné stíhací letouny F-35 'jailbreaknout stejně jako iPhony', tedy upravit jejich software bez souhlasu USA nebo spolupráce s výrobcem Lockheed Martin. Tento výrok zazněl v rozhovoru na BNR Nieuwsradio, kde Tuinman naznačil, že evropské země by mohly potřebovat větší nezávislost na americké technologii. Jak by bylo jailbreak možné technicky provést pan ministr nijak nespecifikoval, nicméně je známé, že izraelské letectvo ve svých modifikovaných stíhačkách F-35 používá vlastní software.

    NUKE GAZA! 🎆 | Komentářů: 35
    19.2. 06:00 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 162 (pdf).

    Ladislav Hagara | Komentářů: 0
    19.2. 05:55 | IT novinky

    Sdružení CZ.NIC, správce české národní domény, zveřejnilo Domain Report za rok 2025 s klíčovými daty o vývoji domény .CZ. Na konci roku 2025 bylo v registru české národní domény celkem 1 515 860 s koncovkou .CZ. Průměrně bylo měsíčně zaregistrováno 16 222 domén, přičemž nejvíce registrací proběhlo v lednu (18 722) a nejméně pak v červnu (14 559). Podíl domén zabezpečených pomocí technologie DNSSEC se po několika letech stagnace výrazně

    … více »
    Ladislav Hagara | Komentářů: 9
    18.2. 18:33 | IT novinky

    Google představil telefon Pixel 10a. S funkci Satelitní SOS, která vás spojí se záchrannými složkami i v místech bez signálu Wi-Fi nebo mobilní sítě. Cena telefonu je od 13 290 Kč.

    Ladislav Hagara | Komentářů: 14
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (11%)
     (27%)
     (3%)
     (4%)
     (2%)
     (12%)
     (26%)
    Celkem 918 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Administrace komentářů

    Jste na stránce určené pro řešení chyb a problémů týkajících se diskusí a komentářů. Můžete zde našim administrátorům reportovat špatně zařazenou či duplicitní diskusi, vulgární či osočující příspěvek a podobně. Děkujeme vám za vaši pomoc, více očí více vidí, společně můžeme udržet vysokou kvalitu AbcLinuxu.cz.

    Příspěvek
    8.9.2009 20:45 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: SELECT vicero výrazů
    Přílohy:

    Pointa WITH (factoring klauzule) je hlavně v tom, že materializuje. Bez indexů. A z toho vyplývá i využití. :-D Třeba Oracle umí udělat in-line view, ale někdy ne, což je zákeřné. :-)

    Následující příklad ukazuje in-line view:

    CREATE TABLE my_all_tables (
        table_id NUMBER(10) NOT NULL,
        table_name VARCHAR2(30) NOT NULL)
    /
    
    ALTER TABLE my_all_tables ADD CONSTRAINT pk_mat_tid PRIMARY KEY (table_id)
    /
    
    CREATE TABLE my_all_schemas (
        schema_name VARCHAR2(30) NOT NULL,
        table_id NUMBER(10) NOT NULL)
    /
    
    INSERT ALL
        INTO my_all_tables (table_id, table_name)
            VALUES (table_id1, table_name1)
        INTO my_all_schemas (schema_name, table_id)
            VALUES (table_schema1, table_id1)
    SELECT
        ROW_NUMBER() OVER (ORDER BY att.table_name ASC) AS table_id1,
        att.owner AS table_schema1,
        att.table_name AS table_name1
    FROM
        all_tables att
    /
    
    COMMIT
    /
    
    ALTER TABLE my_all_schemas ADD CONSTRAINT fk_mas_mat FOREIGN KEY (table_id) REFERENCING my_all_tables (table_id)
    /
    
    CREATE INDEX idx_mat_tn ON my_all_tables (table_name)
    /
    
    EXPLAIN PLAN FOR SELECT
        '"' || mas.schema_name || '"."' || mat.table_name || '"' AS full_name
    FROM
        my_all_schemas mas INNER JOIN my_all_tables mat ON (mas.table_id = mat.table_id)
    WHERE
        mat.table_name LIKE 'C%'
    /
    
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)
    /
    
    EXPLAIN PLAN FOR SELECT
        '"' || dta.schema_name || '"."' || dta.table_name || '"' AS full_name
    FROM
        (SELECT
            mas.schema_name,
            mat.table_name
        FROM
            my_all_schemas mas INNER JOIN my_all_tables mat ON (mas.table_id = mat.table_id)) dta
    WHERE
        dta.table_name LIKE 'C%'
    /
    
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)
    /
    
    EXPLAIN PLAN FOR WITH dta AS (SELECT
            mas.schema_name,
            mat.table_name
        FROM
            my_all_schemas mas INNER JOIN my_all_tables mat ON (mas.table_id = mat.table_id))
    SELECT
        '"' || dta.schema_name || '"."' || dta.table_name || '"' AS full_name
    FROM
        dta
    WHERE
        dta.table_name LIKE 'C%'
    /
    
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)
    /
    
    DROP TABLE my_all_schemas PURGE
    /
    
    DROP TABLE my_all_tables PURGE
    /
    

    A výstup:

    CREATE TABLE succeeded.
     ALTER TABLE my_all_tables succeeded.
    CREATE TABLE succeeded.
    5254 rows inserted
    COMMIT succeeded.
     ALTER TABLE my_all_schemas succeeded.
    CREATE TABLE succeeded.
     ALTER TABLE my_all_tables succeeded.
    CREATE TABLE succeeded.
    5254 rows inserted
    COMMIT succeeded.
     ALTER TABLE my_all_schemas succeeded.
    CREATE INDEX succeeded.
    EXPLAIN PLAN succeeded.
    PLAN_TABLE_OUTPUT
    -----------------------------------------------------------------------------------------------
    Plan hash value: 1386169526
    
    -----------------------------------------------------------------------------------------------
    | Id  | Operation                    | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |                |   171 | 10260 |    11  (10)| 00:00:01 |
    |*  1 |  HASH JOIN                   |                |   171 | 10260 |    11  (10)| 00:00:01 |
    |   2 |   TABLE ACCESS BY INDEX ROWID| MY_ALL_TABLES  |   171 |  5130 |     5   (0)| 00:00:01 |
    |*  3 |    INDEX RANGE SCAN          | IDX_MAT_TN     |   171 |       |     3   (0)| 00:00:01 |
    |   4 |   TABLE ACCESS FULL          | MY_ALL_SCHEMAS |  2627 | 78810 |     5   (0)| 00:00:01 |
    -----------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - access("MAS"."TABLE_ID"="MAT"."TABLE_ID")
       3 - access("MAT"."TABLE_NAME" LIKE 'C%')
           filter("MAT"."TABLE_NAME" LIKE 'C%')
    
    Note
    -----
       - dynamic sampling used for this statement
    
    22 rows selected
    
    EXPLAIN PLAN succeeded.
    PLAN_TABLE_OUTPUT
    -----------------------------------------------------------------------------------------------
    Plan hash value: 1386169526
    
    -----------------------------------------------------------------------------------------------
    | Id  | Operation                    | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |                |   171 | 10260 |    11  (10)| 00:00:01 |
    |*  1 |  HASH JOIN                   |                |   171 | 10260 |    11  (10)| 00:00:01 |
    |   2 |   TABLE ACCESS BY INDEX ROWID| MY_ALL_TABLES  |   171 |  5130 |     5   (0)| 00:00:01 |
    |*  3 |    INDEX RANGE SCAN          | IDX_MAT_TN     |   171 |       |     3   (0)| 00:00:01 |
    |   4 |   TABLE ACCESS FULL          | MY_ALL_SCHEMAS |  2627 | 78810 |     5   (0)| 00:00:01 |
    -----------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - access("MAS"."TABLE_ID"="MAT"."TABLE_ID")
       3 - access("MAT"."TABLE_NAME" LIKE 'C%')
           filter("MAT"."TABLE_NAME" LIKE 'C%')
    
    Note
    -----
       - dynamic sampling used for this statement
    
    22 rows selected
    
    EXPLAIN PLAN succeeded.
    PLAN_TABLE_OUTPUT
    -----------------------------------------------------------------------------------------------
    Plan hash value: 1386169526
    
    -----------------------------------------------------------------------------------------------
    | Id  | Operation                    | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |                |   171 | 10260 |    11  (10)| 00:00:01 |
    |*  1 |  HASH JOIN                   |                |   171 | 10260 |    11  (10)| 00:00:01 |
    |   2 |   TABLE ACCESS BY INDEX ROWID| MY_ALL_TABLES  |   171 |  5130 |     5   (0)| 00:00:01 |
    |*  3 |    INDEX RANGE SCAN          | IDX_MAT_TN     |   171 |       |     3   (0)| 00:00:01 |
    |   4 |   TABLE ACCESS FULL          | MY_ALL_SCHEMAS |  2627 | 78810 |     5   (0)| 00:00:01 |
    -----------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - access("MAS"."TABLE_ID"="MAT"."TABLE_ID")
       3 - access("MAT"."TABLE_NAME" LIKE 'C%')
           filter("MAT"."TABLE_NAME" LIKE 'C%')
    
    Note
    -----
       - dynamic sampling used for this statement
    
    22 rows selected
    
     DROP TABLE my_all_schemas succeeded.
     DROP TABLE my_all_tables succeeded.
    

    Ale jakmile uděláš něco složitějšího:

    WITH dta AS (SELECT
            mas.schema_name,
            mat.table_name,
            LENGTH(mat.table_name) AS table_name_len
        FROM
            my_all_schemas mas INNER JOIN my_all_tables mat ON (mas.table_id = mat.table_id))
    SELECT
        '"' || dta.schema_name || '"."' || dta.table_name || '" (' || gen.val || ')' AS full_name
    FROM
        dta INNER JOIN (SELECT
                gen.val
            FROM
                (SELECT
                    LEVEL AS val
                FROM
                    dual
                CONNECT BY
                    LEVEL <= (SELECT MAX(dta.table_name_len) FROM dta)) gen) gen
            ON ((dta.table_name_len <= 1 AND gen.val = 1) OR (dta.table_name_len > 1 AND gen.val <= dta.table_name_len))
    WHERE
        dta.table_name LIKE 'C%'
    /
    

    pak LOAD AS SELECT a čau:

    EXPLAIN PLAN succeeded.
    PLAN_TABLE_OUTPUT
    -------------------------------------------------------------------------------------------------------------
    Plan hash value: 330330509
    
    -------------------------------------------------------------------------------------------------------------
    | Id  | Operation                       | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
    -------------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                |                           |     8 |   480 |    21   (5)| 00:00:01 |
    |   1 |  TEMP TABLE TRANSFORMATION      |                           |       |       |            |          |
    |   2 |   LOAD AS SELECT                |                           |       |       |            |          |
    |*  3 |    HASH JOIN                    |                           |  2627 |   153K|    11  (10)| 00:00:01 |
    |   4 |     TABLE ACCESS FULL           | MY_ALL_SCHEMAS            |  2627 | 78810 |     5   (0)| 00:00:01 |
    |   5 |     TABLE ACCESS FULL           | MY_ALL_TABLES             |  2627 | 78810 |     5   (0)| 00:00:01 |
    |   6 |   NESTED LOOPS                  |                           |     8 |   480 |    10   (0)| 00:00:01 |
    |   7 |    VIEW                         |                           |     1 |    13 |     2   (0)| 00:00:01 |
    |*  8 |     CONNECT BY WITHOUT FILTERING|                           |       |       |            |          |
    |   9 |      FAST DUAL                  |                           |     1 |       |     2   (0)| 00:00:01 |
    |  10 |      SORT AGGREGATE             |                           |     1 |    13 |            |          |
    |  11 |       VIEW                      |                           |  2627 | 34151 |     8   (0)| 00:00:01 |
    |  12 |        TABLE ACCESS FULL        | SYS_TEMP_0FD9D6608_51DED0 |  2627 |   120K|     8   (0)| 00:00:01 |
    |* 13 |    VIEW                         |                           |     8 |   376 |     8   (0)| 00:00:01 |
    |  14 |     TABLE ACCESS FULL           | SYS_TEMP_0FD9D6608_51DED0 |  2627 |   120K|     8   (0)| 00:00:01 |
    -------------------------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       3 - access("MAS"."TABLE_ID"="MAT"."TABLE_ID")
       8 - filter(LEVEL<= (SELECT MAX("DTA"."TABLE_NAME_LEN") FROM  (SELECT /*+ CACHE_TEMP_TABLE ("T1")
                  */ "C0" "SCHEMA_NAME","C1" "TABLE_NAME","C2" "TABLE_NAME_LEN" FROM "SYS"."SYS_TEMP_0FD9D6608_51DED0"
                  "T1") "DTA"))
      13 - filter("DTA"."TABLE_NAME" LIKE 'C%' AND ("DTA"."TABLE_NAME_LEN"<=1 AND "GEN"."VAL"=1 OR
                  "DTA"."TABLE_NAME_LEN">1 AND "GEN"."VAL"<="DTA"."TABLE_NAME_LEN"))
    
    Note
    -----
       - dynamic sampling used for this statement
    
    35 rows selected
    

    Zatímco, když si ty dotazy rozkopíruješ:

    SELECT
        '"' || dta.schema_name || '"."' || dta.table_name || '" (' || gen.val || ')' AS full_name
    FROM
        (SELECT
            mas.schema_name,
            mat.table_name,
            LENGTH(mat.table_name) AS table_name_len
        FROM
            my_all_schemas mas INNER JOIN my_all_tables mat ON (mas.table_id = mat.table_id)) dta
        INNER JOIN (SELECT
                gen.val
            FROM
                (SELECT
                    LEVEL AS val
                FROM
                    dual
                CONNECT BY
                    LEVEL <= (SELECT
                            MAX(dta.table_name_len)
                        FROM
                            (SELECT
                                mas.schema_name,
                                mat.table_name,
                                LENGTH(mat.table_name) AS table_name_len
                            FROM
                                my_all_schemas mas INNER JOIN my_all_tables mat ON (mas.table_id = mat.table_id)) dta)) gen) gen
            ON ((dta.table_name_len <= 1 AND gen.val = 1) OR (dta.table_name_len > 1 AND gen.val <= dta.table_name_len))
    WHERE
        dta.table_name LIKE 'C%'
    /
    

    dostaneš:

    EXPLAIN PLAN succeeded.
    PLAN_TABLE_OUTPUT
    ---------------------------------------------------------------------------------------------------
    Plan hash value: 2113348083
    
    ---------------------------------------------------------------------------------------------------
    | Id  | Operation                        | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                 |                |     1 |    73 |    12   (9)| 00:00:01 |
    |*  1 |  HASH JOIN                       |                |     1 |    73 |    12   (9)| 00:00:01 |
    |   2 |   NESTED LOOPS                   |                |       |       |            |          |
    |   3 |    NESTED LOOPS                  |                |     1 |    43 |     6   (0)| 00:00:01 |
    |   4 |     VIEW                         |                |     1 |    13 |     2   (0)| 00:00:01 |
    |*  5 |      CONNECT BY WITHOUT FILTERING|                |       |       |            |          |
    |   6 |       FAST DUAL                  |                |     1 |       |     2   (0)| 00:00:01 |
    |   7 |       SORT AGGREGATE             |                |     1 |    43 |            |          |
    |*  8 |        HASH JOIN                 |                |  2627 |   110K|    11  (10)| 00:00:01 |
    |   9 |         TABLE ACCESS FULL        | MY_ALL_SCHEMAS |  2627 | 34151 |     5   (0)| 00:00:01 |
    |  10 |         TABLE ACCESS FULL        | MY_ALL_TABLES  |  2627 | 78810 |     5   (0)| 00:00:01 |
    |* 11 |     INDEX RANGE SCAN             | IDX_MAT_TN     |   171 |       |     2   (0)| 00:00:01 |
    |* 12 |    TABLE ACCESS BY INDEX ROWID   | MY_ALL_TABLES  |     1 |    30 |     4   (0)| 00:00:01 |
    |  13 |   TABLE ACCESS FULL              | MY_ALL_SCHEMAS |  2627 | 78810 |     5   (0)| 00:00:01 |
    ---------------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - access("MAS"."TABLE_ID"="MAT"."TABLE_ID")
       5 - filter(LEVEL<= (SELECT MAX(LENGTH("MAT"."TABLE_NAME")) FROM "MY_ALL_TABLES"
                  "MAT","MY_ALL_SCHEMAS" "MAS" WHERE "MAS"."TABLE_ID"="MAT"."TABLE_ID"))
       8 - access("MAS"."TABLE_ID"="MAT"."TABLE_ID")
      11 - access("MAT"."TABLE_NAME" LIKE 'C%')
           filter("MAT"."TABLE_NAME" LIKE 'C%')
      12 - filter("GEN"."VAL"=1 AND LENGTH("MAT"."TABLE_NAME")<=1 OR
                  LENGTH("MAT"."TABLE_NAME")>1 AND "GEN"."VAL"<=LENGTH("MAT"."TABLE_NAME"))
    
    Note
    -----
       - dynamic sampling used for this statement
    
    36 rows selected
    

    Ano, příklad není ideální, ale nic lepšího mě teď narychlo nenapadá.

    Oracle 11gR1

    V tomto formuláři můžete formulovat svou stížnost ohledně příspěvku. Nejprve vyberte typ akce, kterou navrhujete provést s diskusí či příspěvkem. Potom do textového pole napište důvody, proč by měli admini provést vaši žádost, problém nemusí být patrný na první pohled. Odkaz na příspěvek bude přidán automaticky.

    Vaše jméno
    Váš email
    Typ požadavku
    Slovní popis
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.