PL / SQL - хранимая процедура подстроки - PullRequest
0 голосов
/ 04 марта 2019

Я делаю собеседование по PL / SQL, и я действительно застрял.Может ли кто-нибудь помочь?

Создать хранимую процедуру для возврата подстрок из значения входной строки.Входной параметр должен быть разделителем подстроки.

Описание задачи

Хранимая процедура должна иметь входные параметры:

•   STRING
•   DELIMITER //any symbol
•   STRING_NUMBER //number of substring to be returned

Input example: STRING => ‘one,two,three’,
                            DELIMITER => ‘e’,
                            STRING_NUMBER => null
Output shall be: ‘on’
                              ‘,two,thr’
                              ‘’
                              ‘’

If STRING_NUMBER => 2, output shall be: ‘,two,thr’

РЕДАКТИРОВАТЬ:

Сначала я пытаюсь обрезать строку с помощью функции TRIM, но это не работает.Почему?

CREATE OR REPLACE PROCEDURE substring
(STRNG IN VARCHAR2,DELIMITER IN VARCHAR2)
IS
instring VARCHAR2(100);
BEGIN
instring:= TRIM(DELIMITER FROM STRNG);
DBMS_OUTPUT.PUT_LINE(instring);
END;

set serveroutput on
BEGIN
substring('marc','a');
END;

РЕДАКТИРОВАТЬ 2:

Это делает часть на работе:

CREATE OR REPLACE PROCEDURE substring
(STRNG IN VARCHAR2,DELIMITER IN VARCHAR2)
IS
instring VARCHAR2(100);
BEGIN
instring:= REPLACE(STRNG,DELIMITER);
DBMS_OUTPUT.PUT_LINE(instring);
END;

set serveroutput on
BEGIN
substring('marc','a');
END;

1 Ответ

0 голосов
/ 04 марта 2019

Вот мое собственное решение:

CREATE OR REPLACE PROCEDURE substring
(STRNG IN VARCHAR2,DELIMITER IN VARCHAR2, STRING_NUMBER IN NUMBER)
IS
replace_string VARCHAR2(100);
instring NUMBER;
comma_counter NUMBER;
substring VARCHAR2(100);
BEGIN
replace_string:= REPLACE(STRNG,DELIMITER);
comma_counter:=REGEXP_COUNT(STRNG,',');
instring:=INSTR(STRNG,',',1,comma_counter-STRING_NUMBER+1);
substring:=SUBSTR(replace_string,instring);

DBMS_OUTPUT.PUT_LINE(replace_string);
DBMS_OUTPUT.PUT_LINE(','||substring);

END;

set serveroutput on
BEGIN
substring('one,two,three,four','e',2);
END;
...