sql >> Database >  >> RDS >> Oracle

Hoe kan ik rijen retourneren op basis van de databasegebruiker en de inhoud van de tabel?

Op basis van je vorige vraag en informatie die je hebt gepost, heb ik de vraag als volgt begrepen:als je select hebt toegestaan op de hele tafel voor elke gebruiker, dan is het in staat om alle . op te halen rijen ervan. U moet waarden verder beperken.

Een optie - aangezien we het over de functie hebben - is om case . te gebruiken in where clausule.

Hier is een voorbeeld.

Voorbeeldgegevens:

SQL> create table rating as
  2    select 1 id, 'sys' name, 4 score from dual union all
  3    select 3,    'leo'     , 3 from dual union all
  4    select 6,    'scott'   , 5 from dual union all
  5    select 7,    'hr'      , 2 from dual;

Table created.

Functie:

  • het accepteert gebruikersnaam als parameter (let op hoofdletters! In mijn voorbeeld is alles kleine letters. In jouw, misschien moet je upper gebruiken functie of iets dergelijks)
  • case zegt:if par_user is gelijk aan sys , laat het alle rijen ophalen. Haal anders alleen rijen op waarvan de naamkolom gelijk is aan par_user
  • geef het resultaat terug

Dus:

SQL> create or replace function f_rating (par_user in varchar2)
  2    return number
  3  is
  4    retval number;
  5  begin
  6    select avg(score)
  7      into retval
  8      from rating
  9      where name = case when par_user = 'sys' then name
 10                        else par_user
 11                   end;
 12    return retval;
 13  end;
 14  /

Function created.

Laten we het proberen:

SQL> select f_rating('sys') rating_sys,
  2         f_rating('hr')  rating_hr
  3  from dual;

RATING_SYS  RATING_HR
---------- ----------
       3,5          2

SQL>


  1. Query samenvoegen die ORA-30926 retourneert:kan geen stabiele set rijen in de brontabellen krijgen

  2. Oracle SQL - kan CASE worden gebruikt in een controlebeperking om gegevensattributen te bepalen?

  3. Retourneert slechts één rij van de meest rechtse tabel voor elke rij in de meest linkse tabel

  4. Opgeslagen Oracle-procedure:retourneer zowel de resultaatset als de out-parameters