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 कहते हैं:अगर 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. प्राथमिक कुंजी बदलें

  2. केवल समय कैसे स्टोर करें; तारीख और समय नहीं?

  3. SQL इंजेक्शन की भेद्यता और Oracle में इसकी रोकथाम को प्रदर्शित करने के लिए एक उदाहरण

  4. ओरेकल:क्या स्कीमा के लिए समानार्थी बनाना संभव है?

  5. ORACLE में विभाजन तालिका का नाम स्वतः बदल जाता है