View Full Version : سوال: Procedure....
sepehr.net
دوشنبه 26 اردیبهشت 1390, 10:24 صبح
سلام به همه ی دوستان
یک سوال دارم ، تو sql ما یک پروسیجر میساختیم که خروجی اون یک select میتونست باشه،
تو اوراکل به چه صورتی میتونیم این کار رو انجام بدیم؟
ahp2009
پنج شنبه 19 خرداد 1390, 09:46 صبح
سلام به همه ی دوستان
یک سوال دارم ، تو sql ما یک پروسیجر میساختیم که خروجی اون یک select میتونست باشه،
تو اوراکل به چه صورتی میتونیم این کار رو انجام بدیم؟
يه مثال ميزنم اين پروسيجر با خروجي يه كرسر است كه مثلا تو دات نت هم خروجيشو توديتا تيبل بگيريد.
PROCEDURE proc_test(p_in in number,p_ref in out sys_refcursor) is
begin
open p_ref for
select *
from tbl1
where id<=p_in;
end;
و تنظيمات دات نت
OracleCommand cmd = new OracleCommand("proc_test", cnn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("p_in", OracleType.Number).Direction = ParameterDirection.Input;
cmd.Parameters.Add("p_ref", OracleType.Cursor).Direction = ParameterDirection.Output;
cmd.Parameters[0].Value = 10;
DataSet ds = new DataSet();
OracleDataAdapter oraDa = new OracleDataAdapter(cmd);
oraDa.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
sepehr.net
دوشنبه 03 مرداد 1390, 18:19 عصر
مرسی از جواب شما
یعنی غیر از این روش ، روش دیگه ایی نیست؟
کرزر در اس کیو ال سرعت رو خیلی کند میکرد، در اوراکل منظور از این کرزر همونه یا فرق داره؟ یعنی سرعت رو کند نمیکنه؟
و سوال آخر این روش در اوراکل اصولی هست؟ یعنی پیشنهاد میشه که استفاده کنیم یا نا؟
با تشکر
sajjadzandi
پنج شنبه 06 مرداد 1390, 01:02 صبح
سلام
عزیزم کرسر یا همون کرزر که میگین میشه از طریق پکیج ها نوشت که تو سرعت تاثیر کمی داره به چند دلیل مختلف از حوصله خارج.
اما اینکه شما چطوری بخواین بنویسین اینجوریه:
اگر میتونی از named procedure استفاده کنی بعد اون از pipelined functions استفاده کن.
CREATE PACKAGE pkg1 AS
TYPE numset_t IS TABLE OF NUMBER;
FUNCTION f1(x NUMBER) RETURN numset_t PIPELINED;
END pkg1;
/
CREATE PACKAGE BODY pkg1 AS
-- FUNCTION f1 returns a collection of elements (1,2,3,... x)
FUNCTION f1(x NUMBER) RETURN numset_t PIPELINED IS
BEGIN
FOR i IN 1..x LOOP
PIPE ROW(i);
END LOOP;
RETURN;
END;
END pkg1;
/
-- pipelined function is used in FROM clause of SELECT statement
SELECT * FROM TABLE(pkg1.f1(5));
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.