CREATE OR REPLACE FUNCTION decodedim(str IN VARCHAR2, table_id IN NUMBER)RETURN VARCHAR2ISRET VARCHAR2(300);BEGINFOR code_name IN (select wm_concat(flag_name) INTO RET from(select flag_name from PU_META_PLAT.MD_META_DIM_CODE where dim_table_id = table_id and flag_code in (SELECTtrim(substr(',' || str || ',', instr(',' || str || ',', ',', 1, LEVEL)+1,instr(',' || str || ',', ',', 1, LEVEL + 1)-instr(',' || str || ',', ',', 1, LEVEL)-1))FROM dualCONNECT BY LEVEL <= (length(',' || str || ',')-length(replace(',' || str || ',', ',', '')))/1-1)))LOOPDBMS_OUTPUT.put_line(RET);RETURN RET;END LOOP;END;上面是函數建立的代碼,下面是執行函數:select decodedim('1,2,3,4,5,6,7,8,25,26,27,28,29,32,33,34,35', 5376) from dual;不知道為什么結果沒有數據,求大神幫忙看看?
3 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
你這個結構有問題,你這個循環不管幾次,總是會在第一次就跳出去。return 應該是在loop結束之后。
去看看上面的查詢能不能返回結果。
自己寫的程序盡量有異??刂?。方便調試。你這種簡單的程序,調試一下就能看到問題在哪里了。

拉丁的傳說
TA貢獻1789條經驗 獲得超8個贊
代碼太長了,又沒有注釋,沒法看啊。
請問您是在什么工具中執行的,如果是sqlplus,那么要先執行"set serveroutput on",如果是sql developer之類的圖形化工具,一般不用額外作設置。
其次,可以在每一步操作之后加上這一步的結果輸出語句,例如dbms_output.put_line(結果),方便查看和調試。
希望對您有幫助啦。

冉冉說
TA貢獻1877條經驗 獲得超1個贊
你for循環中的語句能執行么?
我覺得如果直接執行語句沒有問題,可以不用設置變量ret
直接取循環的內容就好了。
select wm_concat(flag_name) INTO RET ——》select wm_concat(flag_name) as tmp
DBMS_OUTPUT.put_line(RET); -----> DBMS_OUTPUT.put_line(code_name.tmp);
RETURN RET; ----->RETURN code_name.tmp;
- 3 回答
- 0 關注
- 236 瀏覽
添加回答
舉報
0/150
提交
取消