تفاوت Cast و Convert در #C

تفاوت Cast و Convert در گستردگی استفاده آنها می باشد. Cast زمانی استفاده می شود که دو متغیر مبدا و مقصد از یک خانواده باشند اما Convert حتی برای تبدیل تایپ هایی که از یک نوع نیز نمی باشند استفاده می شود مثلا با استفاده از Convert می توان String را به int و یا به DateTime  تبدیل کرد.   

 

X2 = (int) X1;
X2 = Convert.ToInt32(X1);

در مثال فوق در خط اول برای تبدیل X1 به Int از Cast استفاده شده است و در خط دوم برای این تبدیل از Convert استفاده شده است. البته در هر دو حالت فوق در صورتی که محتوای X1 عددی نباشد Exception ایجاد می شود یعنی هیچ یک از دو روش فوق Safe Cast نمی باشند. 

اگر بخواهیم SafeCast باشد باید این تبدیل را به صورت زیر بنویسیم:  

  

 var result  = int.TryParse(X1 , out  x);

در این حالت در صورتی که نتواند متغیر X1 را به int تبدیل کند محتوای result را که boolean است false برمی گرداند و درصورتی که بتواند تبدیل کند محتوای result را true برمی گرداند و مقدار تبدیل یافته جدید را در متغیر x که از نوع Out تعریف شده است، قرار می دهد.

فراخوانی Procedure در pl/sql

در pl/Sql فراخوانی procedre ها با استفاده از دستور Execute می باشد. به عنوان مثال برای فراخوانی یک پراسیژر که ورودی اش یک integer است به صورت زیر می نویسیم: 

Execute myprocedure (1);

Exception های دستور Select Into در pl/sql

وقتی در pl/sql از دستور Select into استفاده می شود در صورتی که این دستور رکورد مورد نظر را پیدا نکند و یا بیش از یک رکورد پیدا کند Exception  می دهد. این Exception در صورتی که رکورد را پیدا نکند No_Data_Found است و در صورتی که بیش از یک رکورد پیدا کند Too_Many_Rows است. این Exception ها را به صورت زیر کنترل می کنیم: 

 

Exception  

when no_data_found 

raise_application_error(-20001, 'Record not found')

when too_many_rows 

raise_application_error(-20002, 'too  Many Records Found'); 

procedure در pl/sql

پراسیژر ها بر خلاف Function ها خروجی ندارند. پارامتر ورودی، خروجی و ورودی خروجی می توانند داشته باشند که با out، in و in out مشخص می شوند.  فرمت کلی pricedure در pl/sql به صورت زیر است. پراسیژر زیر با هر بار فراخوانی یک علامت * چاپ می کند. در این پراسیژر متغیر number از نوع varchar است و ورودی می باشد.  

  


create or replace procedure myprocedure(number in varchar)
is
begin
dbms_output.put_line('*');
end;

Cursor در pl/sql

در صورتی که در pl/sql لازم باشد که بخشی از دیتا را انتخاب کنیم و روی آنها عملیاتی را انجام بدهیم، Loop بزنیم و ... باید از Cursor استفاده کنیم. در ادامه کرسری نوشته شده است که به ازای رکوردهای موجود در جدول myTable علامت * چاپ می کند: 

 

declare
   cursor myCursor is
  select * from  mytable;
 
begin
  for rec in myCursor
  loop      
   dbms_output.put_line('*');
   end loop;
 
end;