sql >> Database teknologi >  >> RDS >> Oracle

SQL-lagret procedure til at kontrollere værdien ja/nej i en tabel og udføre sql

Der er ingen if (cursor) konstruktion eller faktisk en hvilken som helst exists operator i PL/SQL-syntaks. Du bliver nødt til at gøre noget som dette:

declare
    somevar number;
begin
    select count(*) into somevar
    from   table1
    where  value_desc = 'Indicator'
    and    value1 = 'Y'
    and    rownum = 1;

    if somevar > 0 then
        execute immediate sql_select_yes
    else 
        execute immediate sql_select_no
    end;
end;

og rækkenummer =1 betingelse er bare i tilfælde af, at der er et stort antal rækker, da du ikke behøver det for at tælle dem alle til en eksistenstest. (Det vil ikke påvirke resultatet, hvis det skal tælle en million rækker, det er bare spild af tid, når du kun er ligeglad med, om der findes en række.) Du kunne lige så godt bruge sådan noget til eksistenstjekket:

select count(*) into somevar from dual
where  exists
       ( select 1
         from   table1
         where  value_desc = 'Indicator'
         and    value1 = 'Y'
         and    rownum = 1 );


  1. Sådan logger du på postgresql db - After session kill (til kopidatabase)

  2. Forespørgselstidsinterval mellem datoer ved hjælp af DATETIME mysql

  3. Tilslut HP-UX Itanium til SQL Server

  4. Hvordan kan jeg yderligere optimere en afledt tabelforespørgsel, som yder bedre end den JOINed-ækvivalent?