Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да върна редове въз основа на потребителя на базата данни и съдържанието на таблицата?

Въз основа на предишния ви въпрос и информацията, която публикувахте, ето как разбрах въпроса:ако сте предоставили select на цялата таблица за всеки потребител, тогава той може да извлече всички редове от него. Трябва допълнително да ограничите стойностите.

Една опция - тъй като говорим за функцията - е да използвате case в where клауза.

Ето един пример.

Примерни данни:

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.

Функция:

  • приема потребителското име като параметър (имайте предвид малки букви! В моя пример всичко е с малки букви. Във вашия може би ще трябва да използвате upper функция или нещо подобно)
  • case казва:if par_user е равно на sys , нека извлече всички редове. В противен случай извличайте само редове, чиято стойност на колоната с имена е равна на par_user
  • връщане на резултата

И така:

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.

Да опитаме:

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 през мрежа?

  2. Как да създадете нова база данни след първоначално инсталиране на база данни Oracle 11g Express Edition?

  3. Заявка за група/брой на Oracle

  4. Прегледайте списък с колони на таблица и приложете заявка към тях

  5. Извикване на пакетна функция на Oracle с помощта на Odbc от C#