Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara mengembalikan baris berdasarkan pengguna database dan isi tabel?

Berdasarkan pertanyaan Anda sebelumnya dan info yang Anda posting, inilah cara saya memahami pertanyaan:jika Anda memberikan select di seluruh tabel ke pengguna mana pun, maka ia dapat mengambil semua baris dari itu. Anda harus lebih membatasi nilai.

Salah satu opsi - seperti yang kita bicarakan tentang fungsinya - adalah menggunakan case di where klausa.

Ini contohnya.

Contoh 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.

Fungsi:

  • ia menerima nama pengguna sebagai parameter (huruf besar huruf pikiran! Dalam contoh saya, semuanya huruf kecil. Dalam Anda, mungkin Anda harus menggunakan upper fungsi atau semacamnya)
  • case mengatakan:jika par_user sama dengan sys , biarkan mengambil semua baris. Jika tidak, ambil hanya baris yang nilai kolom namanya sama dengan par_user
  • kembalikan hasilnya

Jadi:

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.

Mari kita coba:

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. RMAN Daftar perintah cadangan

  2. ubah ukuran tipe data di sql

  3. Apa perbedaan antara setTime(...) dan setTimestamp(...) di Hibernate Query?

  4. Oracle SQL Loop melalui Rentang Tanggal

  5. Oracle View Creation dengan ID yang dihasilkan Database dari Objek Urutan