ওরাকলে কীভাবে এবং কখন sys_refcursor ব্যবহার করবেন


উত্তর:


10

একটি কার্সার একটি কোয়েরির জন্য ফলাফল সেটের পয়েন্টার। কোনও ফিরিয়ে sys_refcursorদেওয়ার মাধ্যমে আপনি ক্লায়েন্টকে প্রয়োজনীয় হিসাবে ক্যোয়ারী থেকে অনেকগুলি বা কয়েকটি সারি আনার অনুমতি দেন। রাষ্ট্রীয় অ্যাপ্লিকেশনগুলিতে এটি ফলাফলের মাধ্যমে পৃষ্ঠাতে ব্যবহৃত হতে পারে।

একটি কার্সার পিএল / এসকিউএল ফাংশন লেখার চেয়ে আরও নমনীয়তার অনুমতি দিতে পারে যা ক্লায়েন্টের উপর নির্ভর করে যে কত সারি আনবে এবং কখন থামবে to এটি বলেছিল, আমি অতিরিক্ত কিছু নমনীয়তা খুঁজে পাই নি যেখানে এই অতিরিক্ত নমনীয়তা কার্যকর।

এটি লক্ষণীয় যে sys_refcursorএটিকে দুর্বলভাবে টাইপ করা হয়েছে, সুতরাং আপনি এমন পয়েন্টারগুলিকে ক্যোয়ারিতে ফিরে আসতে পারেন যা না শুধুমাত্র ক্লজ বা কোথার চেয়ে আলাদা, তবে বিভিন্ন সংখ্যা এবং কলামের প্রকারগুলিও রয়েছে। বিকল্পভাবে আপনি দৃ strongly়ভাবে টাইপ করা কার্সার ব্যবহার করতে পারেন যেখানে ফলাফল সেটে কলামগুলি স্থির করা আছে।

এটি আপনাকে এমন ফাংশনগুলি লিখতে সক্ষম করে যা বিভিন্ন প্রশ্নের উত্তর দেয়, যেমন:

create function get_data ( type varchar2 ) return sys_refcursor as
  ret_cur sys_refcursor;
begin

  if type = 'EMP' then
    open ret_cur for select * from emp;
  elsif type = 'DEPT' then
    open ret_cur for select * from dept;
  end if;

  return ret_cur;
end;

তবে, যদি আপনি sys_refcursorউপরের মত জেনেরিক "ওপেন ক্যোয়ারী" ফাংশন তৈরি করতে ব্যবহার করছেন আপনি সম্ভবত কিছু ভুল করছেন!


@ ক্রিস ... আপনার উদাহরণ ফাংশনটি "ভুল" কেন?
জনি উ

2
@ জোহনিউউ একটি "আমাকে কিছু পান" ফাংশন পরিচালনা করা আরও শক্ত হবে। আপনি সব ক্ষেত্রে সঠিক ফলাফল পেয়েছেন তা নিশ্চিত করার জন্য আপনি কীভাবে পরীক্ষা করবেন? সিকিউরিটির কী হবে? যদি আপনি একটি কাঠামো তৈরি করে থাকেন তবে এটি প্রয়োজনীয় হতে পারে। তবে সাধারণ ব্যবসায়ের যুক্তির জন্য পৃথক get_empsএবং get_deptsফাংশন করা ভাল
ক্রিস স্যাকসন

1

সম্ভাবনার উদাহরণ হিসাবে: এটি পিছনে pl / sql, যেহেতু কেউ একটি সারি উপস্থাপনের জন্য একটি বস্তুকে সংজ্ঞায়িত করতে পারে, সেই বস্তুর pl / sQL টেবিলটি সংজ্ঞায়িত করতে পারে,

create type T_MY_TABLE as table of t_my_object;

এবং সাথে শেষ

OPEN p_recordset FOR select * from table( v_my_table );

সুতরাং একটি ডেটাবেস টেবিলের উপর প্রায়শই ঘন এবং / অথবা ক্রিপ্টিক সরাসরি অনুসন্ধানগুলি তৈরির পরিবর্তে, কোনও একটি অভ্যন্তরীণ সারণী তৈরি করতে পারে এবং এটি জনসাধারণের জন্য pl / sQL এর পুরো ক্ষমতা রাখে। এবং ক্লায়েন্ট ফলাফল-সেট সংগ্রহ করা বুদ্ধিমান কেউ নয়। এবং কোনও অভ্যন্তরীণ সারণির সংজ্ঞা পরিবর্তন করা কোনও ডেটাবেস টেবিল পরিবর্তনের চেয়ে কোনও ব্যবস্থাপনা পও থেকে সহজ।

এছাড়াও জ্যাস্পারের মতো প্রতিবেদন জেনারেটরগুলি ব্যবহার করার সময়, আপনি এসকিউএলটিকে রিপোর্টের বাইরে এবং ডাটাবেসের মধ্যে ঠেলে দিতে পারেন, এবং কেবল রেকর্ডসেটটি অর্জনের পদ্ধতিটি কল করতে পারেন, প্রতিবেদনের পাশে ফর্ম্যাটিংয়ের দিকে মনোনিবেশ করার জন্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.