台灣最大程式設計社群網站
線上人數
1559
 
會員總數:246083
討論主題:189658
歡迎您免費加入會員
討論區列表 >> Oracle >> oracle function
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
oracle function
價值 : 400 QP  點閱數:1825 回應數:6
樓主

真的有點難
高級專家
11027 36
6841 1434
發送站內信

不知哪位大大有空 可協助將兩個mssql function改寫成oracle的 感激不盡

ALTER function [dbo].[My_split](@aString varchar(8000),@pattern varchar(10))
returns @temp table([Sid] [int] IDENTITY (1,1) NOT NULL ,Myvalues varchar(100))

as

begin

declare @i int

set @aString=rtrim(ltrim(@aString))

set @i=charindex(@pattern,@aString)

while @i>=1

begin

insert @temp values(left(@aString,@i-1))

set @aString=substring(@aString,@i+1,len(@aString)-@i)

set @i=charindex(@pattern,@aString)

end

if @aString<>''

insert @temp values(@aString)

return

end

第二個
ALTER function [dbo].[fnc_getinvta]()
returns varchar(11) --返回值
as
begin
/*
取得單別
SELECT [dbo].[fnc_getinvta]()
*/
DECLARE @D NVARCHAR(7)
DECLARE @C INT
DECLARE @NEWNO VARCHAR(11)
set @D=CONVERT(varchar(12) , getdate(), 112 )- 19110000
IF LEN(@D)=6
BEGIN
SET @D = '0' + @D
END
SELECT @C=MAX(RIGHT(TA002,3)) FROM INVTA WHERE TA001='1200' AND SUBSTRING(TA002,0,8)=@D
if @C is not null
begin
SET @C = @C+1
end
else
begin
SET @C=1
end

SET @NEWNO= right('000'+cast(@C as varchar),4)
SELECT @NEWNO=CAST(@D AS VARCHAR) +@NEWNO

return @NEWNO
end

本篇文章發表於2013-02-07 16:22
1樓
作者回應

真的有點難
檢舉此回應
+1000點qp
本篇文章回覆於2013-02-07 23:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

fantasy
捐贈 VP 給 fantasy 檢舉此回應
這是第二個,第一個比較麻煩,得再想想...


本篇文章回覆於2013-02-08 11:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

fantasy
捐贈 VP 給 fantasy 檢舉此回應
Sorry,能不能用文字敘述一下您第一個Function是要做什麼、達到什麼效果?

小弟比較熟Oracle的部份,T-SQL只有稍懂,看不太懂您是要做什麼...
本篇文章回覆於2013-02-08 13:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

真的有點難
檢舉此回應
split 把字串利用分隔符號 塞進table

CREATE function My_split(@aString varchar(8000),@pattern varchar(10))
returns @temp table([Sid] [int] IDENTITY (1,1) NOT NULL ,Myvalues varchar(100))
as
begin
declare @i int
set @aString=rtrim(ltrim(@aString))
set @i=charindex(@pattern,@aString)
while @i>=1
begin
insert @temp values(left(@aString,@i-1))
set @aString=substring(@aString,@i+1,len(@aString)-@i)
set @i=charindex(@pattern,@aString)
end
if @aString<>''
insert @temp values(@aString)
return
end

Step2:

使用方式如下:

Declare @ID varchar(600) 參數
DEclare @x varchar(1) 需分隔符號
set @ID = '111,222,333,444'
set @x = ','

select Myvalues FROM my_split(@ID,@x)

結果
111
222
333
444
本篇文章回覆於2013-02-08 15:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

fantasy
捐贈 VP 給 fantasy 檢舉此回應
行轉列...

若是使用Oracle DB 10g以上的版本,Oracle有內建函數可以簡單的達成

而我目前用的是Oracle 9i,就只能自己寫來達成

--先寫一個Procedure




--再執行Procedure將字串行轉列後塞入Table


最後再Select Table就可以看到結果了...
本篇文章回覆於2013-02-08 17:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

真的有點難
檢舉此回應
最近公司準備從mssql 要轉換oracle
所以提出了這幾個需求 感謝你大力協助
我UI都是用 http://www.devexpress.com/
如果你有空 也可以看看 挺方便的
本篇文章回覆於2013-02-08 21:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.