Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

P_AA को कॉल करने में गलत संख्या या तर्कों के प्रकार

आपकी प्रक्रिया इस प्रकार पैरामीटर को परिभाषित करती है:

serv in t45

तो t45 पैरामीटर का परिभाषित डेटाटाइप है।

अब जब आप उस प्रक्रिया को कहते हैं जिसे आप एक चर v . में पास करते हैं . और कैसा है v परिभाषित?

type t1 is table of number;
...
v t1;

t1 t45 . से भिन्न प्रकार है . भले ही उनके पास समान संरचनाएं हों वे विभिन्न प्रकार के हैं . और इसीलिए आपको PLS-00306 मिलता है। समाधान काफी सरल है:परिभाषित करें v t45 . के रूप में ।

आपको संग्रह को प्रारंभ करने की आवश्यकता है। आप इस प्रकार के डिफॉल्ट कंस्ट्रक्टर का उपयोग करते हैं, या तो प्रोग्राम की शुरुआत में ...

v := t45();

... या जब आप इसकी घोषणा करते हैं:

v t45 := t45();

एक बार जब आप इससे आगे निकल जाएंगे तो आप पाएंगे कि आपका असाइनमेंट तर्क गलत है:काउंटर बढ़ाने या सरणी का विस्तार करने से पहले आप संग्रह के एक तत्व में ला रहे हैं। तो आपको यह चाहिए:

declare
  cursor c1 is select serv_item_id from serv_item;
    n number:=0;
    v t45 := t45();
    x number;
begin
  open c1;
  loop
    fetch c1 into x;
    exit when c1%notfound;
    n:=n+1;
    v.extend();
    v(n) := x;
  end loop;
  close c1;
  p_aa(v);
end;
/ 

वैकल्पिक रूप से कम वर्बोज़ बल्क कलेक्ट का उपयोग करें, जो सभी लूपिंग और टाइप प्रबंधन को निहित रूप से संभालता है:

declare
    v t45;
begin
  select serv_item_id 
  bulk collect into v
  from serv_item;
  p_aa(v);
end;
/

यह रहा a db<>fiddle डेमो दोनों तरीकों को काम करते हुए दिखा रहा है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HQL क्वेरी में NULL की जाँच कैसे करें या मान्य नहीं है?

  2. Oracle SQL डेवलपर में डेटाबेस का नाम कैसे क्वेरी करें?

  3. Oracle 12c XML को प्रतिक्रिया से मूल्य मिलता है

  4. Oracle का उपयोग करके Django में स्वचालित परीक्षण बनाते समय ORA-65096 त्रुटि को ठीक करना

  5. विशिष्ट स्कीमा पर उपयोगकर्ता विशेषाधिकार कैसे प्रदान करें?