sql >> Databasteknik >  >> RDS >> Oracle

Oracle söktext av vyer

Detta blir enklare i 12c, där du kan använda

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

Detta förutsätter att textsträngen du letar efter innehåller de första 4000 tecknen. Du kan också låta rapporten inkludera valfri vy där text_length är> 4000 tillsammans med en varning.

I tidigare versioner (eller för att undvika begränsningen på 4 000 tecken) kan du prova en PL/SQL-loop så här:

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 konverterar implicit SQL LONG värde till en 32K PL/SQL-sträng.

(I mina tester i 12.2.0.1.0 misslyckades detta med ORA-06502: PL/SQL: numeric or value error vid select uttalande när min markör inkluderade SYS.DBA_SCHEDULER_RUNNING_JOBS eller SYS."_user_stat" , även om andra vyer med längre text hanterades framgångsrikt, och jag är inte säker på varför. Det kan vara något problem med detta som jag inte ser.)



  1. Fel nyckelfil för tabellen '/tmp/#sql_3c51_0.MYI' försök reparera den

  2. PHP MYSQL Associate array och tabell

  3. MySQL IF ELSEIF i urvalsfrågan

  4. postgreSQL-fel initdb:kommandot hittades inte