oracle - पीएल / एसक्यूएल में अद्यतन द्वारा प्रभावित पंक्तियों की संख्या




plsql sql-update (6)

SQL%ROWCOUNT को असाइन किए बिना भी इस्तेमाल किया जा सकता है (कम से कम ओरेकल 11 जी से )।

जब तक वर्तमान ब्लॉक में कोई ऑपरेशन (अपडेट, SQL%ROWCOUNT या SQL%ROWCOUNT ) नहीं किया जाता है, तब तक SQL%ROWCOUNT शून्य पर सेट हो जाता है। फिर यह अंतिम डीएमएल ऑपरेशन से प्रभावित लाइन की संख्या के साथ रहता है:

कहें कि हमारे पास टेबल क्लाइंट है

create table client (
  val_cli integer
 ,status varchar2(10)
)
/

हम इस तरह से परीक्षण करेंगे:

begin
  dbms_output.put_line('Value when entering the block:'||sql%rowcount);

  insert into client 
            select 1, 'void' from dual
  union all select 4, 'void' from dual
  union all select 1, 'void' from dual
  union all select 6, 'void' from dual
  union all select 10, 'void' from dual;  
  dbms_output.put_line('Number of lines affected by previous DML operation:'||sql%rowcount);

  for val in 1..10
    loop
      update client set status = 'updated' where val_cli = val;
      if sql%rowcount = 0 then
        dbms_output.put_line('no client with '||val||' val_cli.');
      elsif sql%rowcount = 1 then
        dbms_output.put_line(sql%rowcount||' client updated for '||val);
      else -- >1
        dbms_output.put_line(sql%rowcount||' clients updated for '||val);
      end if;
  end loop;  
end;

जिसके परिणामस्वरूप:

Value when entering the block:
Number of lines affected by previous DML operation:5
2 clients updated for 1
no client with 2 val_cli.
no client with 3 val_cli.
1 client updated for 4
no client with 5 val_cli.
1 client updated for 6
no client with 7 val_cli.
no client with 8 val_cli.
no client with 9 val_cli.
1 client updated for 10

मेरे पास एक पीएल / एसक्यूएल फ़ंक्शन है (ओरेकल 10 जी पर चल रहा है) जिसमें मैं कुछ पंक्तियां अपडेट करता हूं। क्या अद्यतन करने के लिए कोई तरीका है कि अद्यतन द्वारा कितनी पंक्तियां प्रभावित हुईं? मैन्युअल रूप से क्वेरी निष्पादित करते समय यह मुझे बताता है कि कितनी पंक्तियां प्रभावित हुईं, मैं पीएल / एसक्यूएल में उस नंबर को प्राप्त करना चाहता हूं।


आप sql%rowcount चर का उपयोग करते हैं।

आपको उस बयान के बाद सीधे कॉल करने की आवश्यकता है जिसके लिए आपको प्रभावित पंक्ति गणना खोजने की आवश्यकता है।

उदाहरण के लिए:

DECLARE
    i number;
BEGIN
    UPDATE employees
    SET status = 'fired'
    WHERE name like '%Bloggs';
    i := sql%rowcount;
END;

कृपया इसे आजमाएं..

create table client (
  val_cli integer
 ,status varchar2(10)
);

---------------------
begin
insert into client
select 1, 'void' from dual
union all
select 4, 'void' from dual
union all
select 1, 'void' from dual
union all
select 6, 'void' from dual
union all
select 10, 'void' from dual;
end;

---------------------
select * from client;

---------------------
declare
  counter integer := 0;
begin
  for val in 1..10
    loop
      update client set status = 'updated' where val_cli = val;
      if sql%rowcount = 0 then
        dbms_output.put_line('no client with '||val||' val_cli.');
      else
        dbms_output.put_line(sql%rowcount||' client updated for '||val);
        counter := counter + sql%rowcount;
      end if;
  end loop;
   dbms_output.put_line('Number of total lines affected update operation: '||counter);
end;

---------------------
select * from client;

--------------------------------------------------------

परिणाम नीचे की तरह होगा:

2 क्लाइंट 1 के लिए अपडेट किया गया
2 val_cli के साथ कोई ग्राहक नहीं।
3 val_cli के साथ कोई ग्राहक नहीं।
4 क्लाइंट 4 के लिए अपडेट किया गया
5 val_cli के साथ कोई ग्राहक नहीं।
1 क्लाइंट 6 के लिए अपडेट किया गया
7 val_cli के साथ कोई ग्राहक नहीं।
8 val_cli के साथ कोई ग्राहक नहीं।
9 val_cli के साथ कोई ग्राहक नहीं।
1 क्लाइंट 10 के लिए अपडेट किया गया
अद्यतन लाइन ऑपरेशन प्रभावित कुल लाइनों की संख्या: 5


संख्या से अधिक गणना पर गणना (*) विश्लेषणात्मक फ़ंक्शन का उपयोग करें यह पंक्तियों की कुल # गिनती होगी


वैकल्पिक रूप से, SQL%ROWCOUNT आप किसी चर को घोषित करने की आवश्यकता के बिना प्रक्रिया के भीतर इसका उपयोग कर सकते हैं


इसे MySQL पर अपनाना - UPDATE में कोई खंड नहीं है, लेकिन यह काम करता है:

UPDATE
    item_master im
    JOIN
    group_master gm ON im.sku=gm.sku 
    JOIN
    Manufacturer_Master mm ON gm.ManufacturerID=mm.ManufacturerID
SET
    im.mf_item_number = gm.SKU --etc
WHERE
    im.mf_item_number like 'STA%'
    AND
    gm.manufacturerID=34




oracle plsql sql-update