sql >> Databáze >  >> RDS >> Oracle

Oracle vyhledávací text pohledů

To je snazší v 12c, kde můžete použít

select *
from   all_views v
where  lower(v.text_vc) like '%abc%';

To předpokládá, že hledaný textový řetězec je v prvních 4000 znacích. Můžete také mít přehled obsahovat jakékoli zobrazení, kde je text_length je> 4000 spolu s varováním.

V dřívějších verzích (nebo abyste se vyhnuli omezení 4000 znaků), můžete zkusit smyčku PL/SQL takto:

begin
    dbms_output.put_line('Owner                          View name');
    dbms_output.put_line('------------------------------ -------------------------------');

    for r in (
        select v.owner, v.view_name, v.text
        from   all_views v
        where  v.owner <> 'SYS'
    )
    loop
        if lower(r.text) like '%abc%' then
            dbms_output.put_line(rpad(r.owner,31) || r.view_name);
        end if;
    end loop;
end;

PL/SQL implicitně převádí SQL LONG hodnotu na řetězec 32 kB PL/SQL.

(V mých testech v 12.2.0.1.0 to selhalo s ORA-06502: PL/SQL: numeric or value error na select příkaz, když můj kurzor obsahoval SYS.DBA_SCHEDULER_RUNNING_JOBS nebo SYS."_user_stat" , i když ostatní pohledy s delším textem byly zpracovány úspěšně a nejsem si jistý proč. V tom může být nějaký problém, který nevidím.)



  1. Hodnoty oddělené čárkou na funkci IN v oracle

  2. MySQL start není jako služba

  3. výsledky pivotního dotazu mysql s GROUP BY

  4. Kód chyby MySQL:1064. Máte chybu v syntaxi SQL