亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我寫了一個oracle自定義函數,但是沒有返回值,是什么情況?

我寫了一個oracle自定義函數,但是沒有返回值,是什么情況?

收到一只叮咚 2022-04-15 11:11:31
oracle自定義函數將某值以逗號分隔,分開輸出如:'12,2,333,5,2222,1'自定義函數執行后122333522221有會的朋友么。我寫了一個沒有返回值。懂的朋友指教下。需要能調用此函數直接對某表的列進行操作如: select 自定義函數(列名) from 表名輸出結果為上述格式的結果。
查看完整描述

3 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

為什么要用自定義函數呢?一個簡單的replace函數就能解決你的問題
select replace(列名,',',chr(10)) from table;

當然,如果你要用函數也不是不行。
create or replace function split_char
(
p_string varchar2
) is
v_sql varchar2(32000);
return varchar2
begin
------- 這里加上對傳入參數的類型的校驗。如果不是varchar2類型則跑出異常
v_sql:=replace(p_string,',',char(10));
return v_sql;

end;

大概就是這樣子。由于手頭上沒環境 只能寫個大概的 希望對你有所幫助


查看完整回答
反對 回復 2022-04-19
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

"select 自定義函數(列名) from 表名" 只會返回一行記錄,而不是你要的多行. 不用自定義函數,你可以參照我寫的例子:
select substr(x.col_1,x.pos1,x.pos2-x.pos1-1)
from (
select
t.col_1,
level as lv,
instr(','||t.col_1||',',',',1,level) as pos1,
instr(','||t.col_1||',',',',1,level+1) as pos2
from zclsys.test2 t
connect by level <= (length(t.col_1) - length(replace(t.col_1, ',', '')))+1
) x; ---t.col_1為有逗號分隔的那列



查看完整回答
反對 回復 2022-04-19
?
MM們

TA貢獻1886條經驗 獲得超2個贊

剛好以前寫過一個SQL Server的拆分字符串,你參考下,不過我沒有用作函數:

declare @T table (sortid int,mychar varchar(10))
declare @i int
declare @str varchar(20)
set @str = '1,3,11,5,20'
set @i = 1
while charindex(',',@str) > 0
begin
insert into @T values(@i, substring(@str,1,charindex(',',@str)-1))
set @str = substring(@str,charindex(',',@str)+1,len(@str))
set @i = @i + 1
end
insert into @T values(@i, @str)

select * from @T

---結果---------------
sortid mychar
----------- ----------
1 1
2 3
3 11
4 5
5 20

(5 row(s) affected)



查看完整回答
反對 回復 2022-04-19
  • 3 回答
  • 0 關注
  • 666 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號