Hello how are you? Could you help me convert this function from sql server to oracle. i'm still new to oracle and I need the function to separate a url by backslah Thanks a lot
create FUNCTION [dbo].[fn_split_string_to_column] (
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @out_put TABLE (
[column_id] INT IDENTITY(1, 1) NOT NULL,
[value] NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @value NVARCHAR(MAX),
@pos INT = 0,
@len INT = 0
SET @string = CASE
WHEN RIGHT(@string, 1) != @delimiter
THEN @string + @delimiter
ELSE @string
END
WHILE CHARINDEX(@delimiter, @string, @pos + 1) > 0
BEGIN
SET @len = CHARINDEX(@delimiter, @string, @pos + 1) - @pos
SET @value = SUBSTRING(@string, @pos, @len)
INSERT INTO @out_put ([value])
SELECT LTRIM(RTRIM(@value)) AS [column]
SET @pos = CHARINDEX(@delimiter, @string, @pos + @len) + 1
END
RETURN
END
I tried to convert the function in this way, but I can't get it to compile and it gives me errors that I don't understand how to solve
I have the error in this part RETURN out_put table(
CREATE OR REPLACE FUNCTION fn_split_string_to_column (
p_string VARCHAR2,
p_delimiter VARCHAR2
)
RETURN out_put table(
column_id
End; INT ROWNUM1, 1) NOT NULL,
valores VARCHAR(2000)
)
AS
BEGIN
v_value VARCHAR2(2000);
v_pos NUMBER(10) := 0;
v_len NUMBER(10) := 0
v_string := CASE
WHEN SUBSTR(string, GREATEST(-LENGTH(string), -1)) != delimiter
THEN string + delimiter
ELSE string
END
WHILE INSTR(string, delimiter, v_pos + 1) > 0
LOOP
v_len := INSTR(string, delimiter, v_pos + 1) - v_pos
v_value := SUBSTR(string, v_pos, v_len)
INSERT INTO out_put (valores)
SELECT LTRIM(RTRIM(v_value)) AS columna FROM dual;
v_pos := INSTR(string, delimiter, v_pos + v_len) + 1
END LOOP
RETURN
END