سه شنبه ۵ اردیبهشت ۱۳۹۶
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 

 
 
 Dynamic Where Clause in Oracle 11g
Database / LINQ / EF
تاریخ ثبت:  ۸۹/۱۱/۱۰
تعداد نمایش:  ۴۳۰۹
  نویسنده: کاوه یزدی نژاد
 
   ۲  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share

کسانیکه در برنامه نویسی سعی میکنن عملیات مربوط به بانک اطلاعاتی را در Stored Procedure انجام بدهند بعضی مواقع به یک مشکل کوچک برخورد میکنند و آن  زمانی است که بخواهند عملیات جستجو را هم به همین روش بنویسند. تهیه Where Clause به شکل داینامیک کمی مشکل است و البته در Oracle مشکل تر از SQL
کد زیر ، یک مثال کوچک و راحت و آزمایش شده است که چطور این امر را در Oracle انجام بدهیم.

مثال ذیل که در اوراکل 11g نوشته شده است نشان میدهد که چگونه میتوان یک Dynamic Query ایجاد کرد که براساس پارامترهای وارد شده از طرف کاربر خروجی مورد نیاز را تهیه نماید.جهت درک بهتر کد پایین به نکات ذیل توجه نمایید :
●اوراکل به حروف بزرگ و کوچک حساس نیست و این روش کدنویسی فقط برای خوانایی بیشتر میباشد.
●این spc به این صورت در نظر گرفته شده است که یک مقدار عددی و یک مقدار رشته ای به آن ارسال میشود.اگر مقدار عددی بزرگتر از صفر باشد در شرط جستجو لحاظ میشود و اگر مقدار رشته هم بصورت یک رشته خالی ارسال نشده باشد در شرط جستجو لحاظ میگردد.
●خروجی بصورت یک sys_refcursor به روال فراخواننده برگشت داده میشود

--****************************************************************************************** 
-- Date          : 89/10/26
--Author       : Kaveh Yazdi Nezahd
--Parameters : Para_01_IN : Numeric parameter(s) that are passed in stored Proceure. 0 means all values have to be returnd
--                 : Para_02_IN : String parameter(s) that are passed in stored Proceure. '' means all values have to be returnd
--******************************************************************************************* 
create or replace PROCEDURE   SP_MyProc
( Para_01_IN IN  NUMBER,     Para_02_IN In Nvarchar2 ,RESULT_OUT OUT sys_refcursor  )
IS 
 Begin 
 declare
 SelectClause       clob; --this will save the dynamic sql statement of search
  whereClause       clob;
    begin
    SelectClause:='';
    whereClause:='';
SelectClause:=' select * from MyTable';
whereClause := ' where {FixedConditionsHere} '
  
Generating dynamic conditions--
  if Para_01_IN != 0 then
          whereClause:=whereClause || ' and Para_01=   '|| to_char(Para_01_IN);
      end if;
      if LENGTH(Para_02 ) > 0  then
          whereClause:=whereClause||' and Para_02  ='||Para_02_IN ;
      end if;
  
       -- This will open the cursor dynamically based on generated SQL commands 
       open RESULT_OUT for   SelectClause||whereClause ;--using whereClause;
       commit;
       end;
   EXCEPTION    WHEN OTHERS THEN  
 RAISE_APPLICATION_ERROR (-20001,'Error code ' || SQLCODE || ': ' || SUBSTR(SQLERRM, 1 , 200));
  
End;
 

  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
کاوه یزدی نژاد
یک برنامه نویس
همه مقاله های نوشته شده توسط این کاربر (۲)
 
  پیام جدید
صفحه ۱ - پیامهای اصلی ۱ تا ۱ از مجموع ۱ پیام اصلی
اولین قبلی بعدی

 عنوان فرستنده تاریخ
 
همکار گرامی یکی از اهداف نوشتن Store Procedure ثبت دادهای اماری در Log فایل است که در روش شما این هدف را نمی توان دید لذا روش ذیر را پیشنهاد می کنم: اميد نقي زاده ۱۳۸۹/۱۱/۱۶
پاسخ به: همکار گرامی یکی از اهداف نوشتن Store Procedure ثبت دادهای اماری در Log فایل است که در روش شما این هدف را نمی توان دید لذا روش ذیر را پیشنهاد می کنم: کاوه یزدی نژاد ۱۳۸۹/۱۱/۱۶
اولین قبلی بعدی

Copyright © 2006 - 2016 All Rights Reserved.
Please direct your questions or comments to