ورود

View Full Version : تابع نویسی در اوراکل



s_ahmadneya
پنج شنبه 03 بهمن 1387, 07:55 صبح
:تشویق:در sql می شد تابعی نوشت واز این تابع ها د رselect استفاده کرد بعنوان مثلا اگه فیلدی داشی که 0 و 1 در ان ذخیره کرده بودی و 0 به معنی خیر و 1 به معنی بله بود تابعی می نوشتی مثلا به تام YesNO اونوقت روی فیلد Felid1که محتوی ان 0و 1 بود اجرا می کردی بصورت کد زیر خروجی را که برمی گرداند بله وخیر بود و به راحتی می شد در دیتا گرید نمایش داد .من الان این کار را با اوراکل بلد نیستم و در سی شارپ دیتاگریدم را اصلاح می کنم که زیاد جالب نیست از دوستان خواهش می کنم کمک کند


select yesno(feild1) from tabel1

راستی من بانکم فقط اوراکل است اما برنامه را با سی شارپ می نویسم

ASKaffash
یک شنبه 13 بهمن 1387, 17:03 عصر
شما مشابه SQLServer میتوانید یک تابع ایجاد کنید که یک ورودی عددی دارد و خروجی رشته ای میدهد
شکل کلی ایجاد تابع اینطوری است:


CREATE OR REPLACE Function [FunctionName](Var1 DataType1,Var2 DataType2,...)
Return [DataTypeOutPut]
As
Begin
--Body
Return [ReturnValue];
End;

jirjirakk
دوشنبه 14 بهمن 1387, 20:27 عصر
CREATE OR REPLACE FUNCTION YesNo (inValue varchar2) RETURN VARCHAR2 IS
BEGIN
if your_condition Then
return 'YES';
else
return 'NO';
end if;
END YesNo;

s_ahmadneya
شنبه 26 بهمن 1387, 15:27 عصر
با تشکر از راهنمایی دوستان عزیر
من تا حدی تونستم توی اوراکل توابع مورد نیاز خودم را بنویسم اما تابع زیر که در sql تاریخ میلادی را به شمسی تبدیل می کند را نتونستم به اواکل تبدیل می کنم اگه کمکم کنید ممنون می شم.
راستی من داده ها تاریخ را به میلادی در بانک ذخیره می کنم و موقعه select می خواهم تبدیل به شمسی انجام شود ایا روش دیگه و راحتری وجود دارد؟
یکی در تاپیک زیر چیزی گفته نظرتان چیست
http://barnamenevis.org/forum/showthread.php?t=144361
و اما کد تابع تبدیل شمسی به میلادی (من سالهای در sqlاز ان استفاده می کنم و مطمئنم جواب می دهد)


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER FUNCTION [dbo].[SP_DATEF_L](@VDATE DATETIME)
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @FDATE VARCHAR(10)
DECLARE @INTYEAR SMALLINT
DECLARE @INTMONTH SMALLINT
DECLARE @INTDAY SMALLINT
DECLARE @INTDAYS SMALLINT
DECLARE @INTOFFSET SMALLINT
DECLARE @STRTMP VARCHAR(10)
DECLARE @XDAYS SMALLINT
DECLARE @XBASE SMALLINT
DECLARE @MYEAR SMALLINT

SELECT @STRTMP=CONVERT (VARCHAR(10),@VDATE,126)
IF LTRIM(RTRIM(@STRTMP))='' RETURN('')
SET @INTDAY=CONVERT(SMALLINT,SUBSTRING(@STRTMP,9,2))
SET @INTMONTH=CONVERT(SMALLINT,SUBSTRING(@STRTMP,6,2))
SET @INTYEAR=CONVERT(SMALLINT,SUBSTRING(@STRTMP,1,4))
SET @MYEAR=@INTYEAR
SET @INTOFFSET=99
IF @INTMONTH<3 SET @INTOFFSET = @INTMONTH - 1
IF @INTMONTH=3 AND (@INTYEAR % 100) <> 0 SET @INTOFFSET=-1
IF @INTMONTH > 3 AND @INTMONTH < 6 AND (@INTYEAR % 100)=0 SET @INTOFFSET=1
IF (@INTMONTH=6 OR @INTMONTH=7) AND (@INTYEAR % 100)=0 SET @INTOFFSET=2
IF @INTMONTH=8 AND (@INTYEAR % 100) = 0 SET @INTOFFSET=3
IF (@INTMONTH=9 OR @INTMONTH=10)
IF (@INTYEAR % 100)=0
SET @INTOFFSET=4
ELSE
SET @INTOFFSET=3
--END IF
--END IF
IF @INTMONTH>10
IF (@INTYEAR % 100)=0
SET @INTOFFSET=5
ELSE
SET @INTOFFSET=4
--END IF
--END IF
IF @INTOFFSET=99
IF @INTMONTH>4
SET @INTOFFSET=FLOOR((@INTMONTH - 4 ) / 2 )
ELSE
SET @INTOFFSET=CEILING((@INTMONTH - 4 ) / 2 )
-- END IF
--END IF
SET @XDAYS=365
IF ((@INTMONTH-1) *30 + @INTOFFSET+@INTDAY+286)>365
IF ((@INTYEAR - 1)%4)=0
SET @XDAYS=366
--ENDIF
--ENDIF
SET @INTDAYS=((@INTMONTH-1)*30 + @INTOFFSET + @INTDAY + 286) % @XDAYS
IF @INTDAYS=0 SET @INTDAYS=@XDAYS --ENDIF
IF (@INTYEAR % 4)=0 AND @INTMONTH>2 AND @INTDAYS>345 AND (@INTYEAR%100)<> 0 SET @INTDAYS= @INTDAYS +1 --END IF
SET @XBASE=287
IF @INTMONTH=1 AND @INTDAY=1 SET @XBASE =286 --ENDIF
IF @INTDAYS>@XBASE
SET @INTYEAR=@INTYEAR-622
ELSE
SET @INTYEAR=@INTYEAR-621
--ENDIF
IF @INTDAYS<187
BEGIN
SET @INTMONTH = FLOOR((@INTDAYS-1)/31)+1
SET @INTDAY=@INTDAYS-(@INTMONTH-1)*31
END
ELSE
BEGIN
IF @INTDAYS-6-FLOOR((@INTDAYS-6)/30)*30=0
SET @INTMONTH=FLOOR((@INTDAYS-6)/30)
ELSE
SET @INTMONTH=FLOOR((@INTDAYS-6)/30)+1
--ENDIF
SET @INTDAY=@INTDAYS-6-(@INTMONTH-1)*30
END
--ENDIF
IF ((@INTYEAR%4)=3 OR (@MYEAR%4)=1 OR ((@INTYEAR%4)=2 AND @INTMONTH* 100 + @INTDAY = 1230)) AND (@MYEAR % 100) <>0
BEGIN
SET @INTDAY = @INTDAY +1
IF @INTDAY=32 - FLOOR(@INTMONTH/7)
BEGIN
SET @INTDAY=1
SET @INTMONTH=@INTMONTH+1
IF @INTMONTH>12
BEGIN
SET @INTMONTH=1
SET @INTYEAR=@INTYEAR+1
END
END
END
--END
SET @FDATE=LTRIM(RTRIM(CONVERT(VARCHAR(4),@INTYEAR)))+ '/'
IF @INTMONTH<=9
SET @FDATE=@FDATE+ '0' + CONVERT (VARCHAR(1),@INTMONTH)+'/'
ELSE
SET @FDATE=@FDATE+CONVERT(VARCHAR(2),@INTMONTH)+'/'
--ENDIF
IF @INTDAY<=9
SET @FDATE=@FDATE+ '0' + CONVERT(VARCHAR(1),@INTDAY)
ELSE
SET @FDATE=@FDATE + CONVERT(VARCHAR(2),@INTDAY)
--ENDIF
RETURN (@FDATE)
END

mexdixabibi
سه شنبه 01 اردیبهشت 1388, 01:45 صبح
to oracle(pl/sql) az dastore decode estefade kon
mesal
select decode(mark,'fd','bob'),mark from d_cars t

mexdixabibi
سه شنبه 01 اردیبهشت 1388, 01:47 صبح
select decode(mark,1,'YES'),mark from d_cars t

select decode(mark,0,'NO'),mark from d_cars t

mexdixabibi
سه شنبه 01 اردیبهشت 1388, 01:47 صبح
select decode(mark,0,'YES'),mark from d_cars t

habel_star
سه شنبه 31 خرداد 1390, 10:00 صبح
سلام
آیا کسی نرم افزاری رو میشناسه که توابع sql به oracle تبدیل کنه البته از نرم های که مبدل دیتابیس sql به oracle استفاده کردم اما فقط جداول رو تبدیل میکنن اگه رهنماییم کنید ممنون میشم
مرسی

hmm
چهارشنبه 08 تیر 1390, 09:30 صبح
اوراکل 9i به بعد تاریخ شمسی رو پشتیبانی میکنه