با عرض سلام و خسته نباشید خدمت کاربران محترم سایت آموزشی پی وی لرن. و کاربرانی که آموزش کامل PL/SQL را دنبال می کنند. در این پست آموزشی، ما در مورد cursor در PL / SQL ( مکان نما در PL / SQL ) بحث خواهیم کرد. اوراکل یک ناحیه حافظه ایجاد می کند، برای پردازش یک دستور SQL، که حاوی تمام اطلاعات مورد نیاز برای پردازش بیانیه است. برای مثال، تعداد ردیف های پردازش شده و همچنین مکان نما یک اشاره گر به این ناحیه است. PL / SQL زمینه را از طریق مکان نما در PL / SQL کنترل می کند. یک مکان نما (یک یا چند) ردیف را با یک دستور SQL باز می کند. مجموعه ای از سطرها که مکان نما در PL / SQL را نگه می دارد، و به عنوان مجموعه فعال شناخته می شود.
شما می توانید مکان نما را نامگذاری کنید تا بتوانید آن را در یک برنامه به منظور استخراج و پردازش ردیف های بازگشت شده توسط دستور SQL، یکی در یک زمان، به کار برد. دو نوع مکان نما وجود دارد.
اشاره گرهای نامتعارف به طور خودکار توسط اوراکل هر زمان که یک دستور SQL اجرا می شود، ایجاد می شود، زمانی که هیچ اشاره گر صریح برای این عبارت وجود ندارد.
برنامه نویسان نمی توانند مکان نما در PL / SQL ضمنی و اطلاعات موجود در آن را کنترل کنند.
هر وقت یک بیانیه (DML ،INSERT، UPDATE و DELETE) صادر می شود، یک نشانگر ضمنی با این عبارت مرتبط می شود.
برای عملیات INSERT، مکان نما دارای اطلاعاتی است که باید وارد شود.
برای عملیات UPDATE و DELETE، مکان نما ردیف هایی را که تحت تاثیر قرار می گیرند شناسایی می کند.
در PL / SQL، می توانید به جدیدترین نشانگر ضمنی به عنوان نشانگر SQL مراجعه کنید، که همیشه دارای صفات مانند٪ FOUND،٪ ISOPEN،٪ NOTFOUND و٪ ROWCOUNT است.
مکانیزم SQL دارای ویژگی های اضافی،٪ BULK_ROWCOUNT و٪ BULK_EXCEPTIONS است، که طراحی شده برای استفاده از بیانیه FORALL.
جدول زیر توضیح ویژگی های مورد استفاده ترین را ارائه می دهد.
S.No | مشخصه و شرح |
---|---|
۱ | %FOUND اگر یک عبارت INSERT، UPDATE، یا DELETE به یک یا چند ردیف برسد یا یک دستور SELECT INTO، یک یا چند ردیف را با علامت TRUE بازگشت می دهد. در غير اين صورت، FALSE باز مي گردد. |
۲ | %NOTFOUND مخالف منطقی٪ FOUND. TRUE اگر یک عبارت INSERT، UPDATE، یا DELETE هیچ ردیف ایفا نکند، یا یک دستور SELECT INTO بدون ردیف بازگشت می کند. در غير اين صورت، FALSE باز مي گردد. |
۳ | %ISOPEN همیشه FALSE را برای نشانگرهای ضمنی به ارث می برند، زیرا اوراکل پس از اجرای دستور SQL مربوط به آن، به طور اتوماتیک مکان نما را بسته می کند. |
۴ | %ROWCOUNT تعداد ردیف های تحت تاثیر یک دستور INSERT، UPDATE، یا DELETE را برمی گرداند، یا توسط دستور SELECT INTO بازگشت می کند. |
هر ویژگی مشخصه cursor به عنوان sql٪ attribute_name به صورت مثال نمایش داده می شود.
در مکان نما در PL / SQL ما از جدول مشتریان که در پست های آموزشی قبلی ایجاد کرده ایم استفاده می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 | Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | +----+----------+-----+-----------+----------+ |
برنامه زیر جدول را به روز می کند و حقوق و دستمزد هر مشتری را با ۵۰۰ افزایش می دهد و
از ویژگی SQL٪ ROWCOUNT برای تعیین تعداد ردیف ها استفاده می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 | DECLARE total_rows number(2); BEGIN UPDATE customers SET salary = salary + 500; IF sql%notfound THEN dbms_output.put_line('no customers selected'); ELSIF sql%found THEN total_rows := sql%rowcount; dbms_output.put_line( total_rows || ' customers selected '); END IF; END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 | 6 customers selected PL/SQL procedure successfully completed. |
اگر سوابق را در جدول مشتریان بررسی کنید، خواهید دید که سطرها به روز شده اند.
1 2 3 4 5 6 7 8 9 10 11 12 | Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2500.00 | | 2 | Khilan | 25 | Delhi | 2000.00 | | 3 | kaushik | 23 | Kota | 2500.00 | | 4 | Chaitali | 25 | Mumbai | 7000.00 | | 5 | Hardik | 27 | Bhopal | 9000.00 | | 6 | Komal | 22 | MP | 5000.00 | +----+----------+-----+-----------+----------+ |
نشانگرهای صریح، مکانیزم های تعیین شده توسط برنامه نویس هستند تا بتوانند کنترل بیشتری بر زمینه منطقه داشته باشند.
یک نشانگر صریح باید در بخش اعلام بلوک PL / SQL تعریف شود.
که در یک بیانیه SELECT که بیش از یک ردیف باز می شود ایجاد می شود.
1 | CURSOR cursor_name IS select_statement; |
کار با مکان نما صریح شامل مراحل زیر است.
اعلام مکان نما نشانگر را با نام و عبارت SELECT مرتبط می کند.
به عنوان مثال:
1 2 | CURSOR c_customers IS SELECT id, name, address FROM customers; |
باز کردن مکان نما حافظه را برای مکان نما در PL / SQL قرار می دهد و آماده می شود تا ردیف های بازگشت شده توسط دستور SQL را به آن اضافه کند.
برای مثال :
مکانیزم مشخص شده را به صورت زیر باز می کنیم.
1 | OPEN c_customers; |
دریافت مکان نما شامل دسترسی به یک ردیف در یک زمان است.
به عنوان مثال :
ردیف ها را از مکان نما فوقانی باز خواهیم کرد:
1 | FETCH c_customers INTO c_id, c_name, c_addr; |
بستن مکان نما به معنای آزاد کردن حافظه اختصاص داده شده است.
به عنوان مثال :
مکان نما فوقانی باز را به صورت زیر خواهیم بست.
1 | CLOSE c_customers; |
در زیر یک نمونه کامل برای نشان دادن مفاهیم مکانیزم های صریح و minua است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | DECLARE c_id customers.id%type; c_name customerS.No.ame%type; c_addr customers.address%type; CURSOR c_customers is SELECT id, name, address FROM customers; BEGIN OPEN c_customers; LOOP FETCH c_customers into c_id, c_name, c_addr; EXIT WHEN c_customers%notfound; dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr); END LOOP; CLOSE c_customers; END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 4 5 6 7 8 | 1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed. |
در این پست آموزشی در مورد مکان نما در PL / SQL صحبت کردیم.
و دانستیم که cursor در PL / SQL یک نوع متغیر ساخت یافته می باشد که به ما اجازه می دهد داده ها (در Sql) را مورد پردازش قرار دهیم .
در حقیقت یک cursor در PL / SQL کاری موقتی است که در حافظه سیستم جهت ذخیره سازی data استخراج شده از بانک اطلاعاتی استفاده می شود.
لذا در طول پردازش، ما مکان نما در PL / SQL را از طریق هر خط داده اداره می کنیم.
این خط داده ها (data) توسط یک cursor در PL / SQL مشخص شده است.
با حرکت cursor در PL / SQL ، می توانید طیفی از داده ها را از یک خط جاری استخراج کنید.
امیر علی
خسته نباشید واقعا ممنون از بابت آموزش
اما تعریف ها اصلا قابل فهم نبودند انگار گول ترجمه کرده و فعل جملات درست جاگذاری نشدن.اگه یکی که تازه شروع کرده باشه هیچی متوجه نمیشه.
ولی مثالها بیسار خوب بودند.بازم ممنون از همه زحماتی که میکشین.