Почему вызывающая процедура, которая использует REGEX_SUBSTR через блок кода PLSQL, возвращает дополнительный символ '¬'? - PullRequest
4 голосов
/ 01 июня 2019

Редактирование в PLSQL.

У меня следующая процедура:

SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE StringTest(StringToTest IN varchar2) 
AS
   result varchar2(100);
BEGIN
    result := REGEXP_SUBSTR(StringToTest, '[a-zA-Z0-9]{1,}\/?\s?\w*(\/\d{4})?',1,1);
    DBMS_OUTPUT.PUT_LINE('Result is ' || result);

END;
/

Цель этой процедуры - взять строку, сопоставить ее с регулярным выражением, а затем вернуть первое совпадение в строке. Я понимаю, что для этого примера регулярное выражение сложнее, чем нужно, но это потому, что я усек код до его простейшей формы. Фактический код намного сложнее, и поэтому регулярное выражение выглядит более сложным, чем нужно для этого примера.

Когда я вызываю процедуру через блок кода PLSQL, такой как

SET SERVEROUTPUT ON
DECLARE
   String1 varchar2(100);
BEGIN
   String1 := '(‘Hello’)';
   StringTest(String1);   
END;
/

Я получаю следующее:

Result is Hello¬

Когда я вызываю процедуру через оператор EXEC, такой как

EXEC StringTest('(‘Hello’)');

Я получаю следующее

Result is Hello

Второй результат - это то, что я ожидаю в обоих случаях. Мой вопрос: почему при вызове той же самой процедуры через блок кода PLSQL добавляется дополнительный символ к выводу?

...