Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zwracać wiersze na podstawie użytkownika bazy danych i zawartości tabeli?

W oparciu o Twoje poprzednie pytanie i opublikowane przez Ciebie informacje, oto jak zrozumiałem pytanie:jeśli przyznałeś select na całej tabeli dla dowolnego użytkownika, wtedy może pobrać wszystkie wiersze z niego. Musisz dodatkowo ograniczyć wartości.

Jedną z opcji - ponieważ mówimy o funkcji - jest użycie case w where klauzula.

Oto przykład.

Przykładowe dane:

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.

Funkcja:

  • akceptuje nazwę użytkownika jako parametr (małe litery! W moim przykładzie wszystko jest małe. W twoim, być może będziesz musiał użyć upper funkcja lub coś w tym stylu)
  • case mówi:if par_user jest równe sys , niech pobierze wszystkie wiersze. W przeciwnym razie pobieraj tylko wiersze, których wartość kolumny nazwy jest równa par_user
  • zwróć wynik

A więc:

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.

Spróbujmy:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle INSTR wstecz w Oracle SQL

  2. DbCommand i parametryzowany SQL, ORACLE vs SQL Server

  3. Zapobieganie opuszczaniu tabeli w docelowym schemacie w Oracle Streams

  4. plik .sql nie zwraca nagłówków kolumn w pliku csv

  5. PL/SQL (Jak obliczyć pierwszy i ostatni dzień dowolnego kwartału dowolnego roku)