Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để trả về các hàng dựa trên người dùng cơ sở dữ liệu và nội dung của bảng?

Dựa trên câu hỏi trước đó của bạn và thông tin bạn đã đăng, đây là cách tôi hiểu câu hỏi:nếu bạn đã cấp select trên toàn bộ bảng cho bất kỳ người dùng nào, sau đó nó có thể tìm nạp tất cả hàng từ nó. Bạn phải hạn chế thêm các giá trị.

Một tùy chọn - như chúng ta đang nói về hàm - là sử dụng casewhere mệnh đề.

Đây là một ví dụ.

Dữ liệu mẫu:

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.

Chức năng:

  • nó chấp nhận tên người dùng làm tham số (viết hoa tâm thư! Trong ví dụ của tôi, mọi thứ đều là chữ thường. Trong của bạn, có lẽ bạn sẽ phải sử dụng upper chức năng hoặc cái gì đó tương tự)
  • case nói:if par_user bằng với sys , hãy để nó tìm nạp tất cả các hàng. Nếu không, chỉ tìm nạp các hàng có giá trị của cột tên bằng par_user
  • trả về kết quả

Vì vậy:

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.

Hãy thử nó:

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. Cách giải quyết biểu thức bị thiếu ORA-00936

  2. ORA-1843:không phải là tháng hợp lệ trong khi cập nhật hồ sơ

  3. Cách tạo VARRAY làm thành viên khối PL / SQL trong cơ sở dữ liệu Oracle

  4. Oracle có tìm nạp tất cả các hàng trước khi đánh giá rownum không?

  5. So sánh ngày trong Oracle SQL