تفاوت 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 تعریف شده است، قرار می دهد.
در pl/Sql فراخوانی procedre ها با استفاده از دستور Execute می باشد. به عنوان مثال برای فراخوانی یک پراسیژر که ورودی اش یک integer است به صورت زیر می نویسیم:
Execute myprocedure (1);
وقتی در 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');
پراسیژر ها بر خلاف 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;
در صورتی که در 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;