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

Jak vrátit řádky na základě uživatele databáze a obsahu tabulky?

Na základě vaší předchozí otázky a informací, které jste zveřejnili, jsem otázku pochopil takto:pokud jste udělili select na celou tabulku libovolnému uživateli, pak je schopen načíst vše řádky z něj. Musíte dále omezit hodnoty.

Jednou z možností - když mluvíme o funkci - je použít case v where klauzule.

Zde je příklad.

Ukázková data:

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.

Funkce:

  • jako parametr přijímá uživatelské jméno (malá písmena! V mém příkladu je vše malá. Ve vašem možná budete muset použít upper funkce nebo něco podobného)
  • case říká:if par_user je rovno sys , nechte načíst všechny řádky. V opačném případě načtěte pouze řádky, jejichž hodnota sloupce názvu je rovna par_user
  • vrácení výsledku

Takže:

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.

Zkusme to:

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. Změna databáze SQL serveru z tabulkové na vícerozměrnou

  2. Přístup odepřen uživateli 'test'@'ip' (pomocí hesla:ANO)

  3. Porozumění tomu, jak Android.com ukládá data v SQL Database Tutorial

  4. Jak mohu provést dávkové vložení do databáze Oracle pomocí Pythonu?