Как использовать переменную в объявлении блока? - PullRequest
0 голосов
/ 04 октября 2019
Declare str varchar2(100);
Begin
str := 'first,last,middle';
select regexp_substr(str, '[^,]+', 1, rownum) as SeparatedStr
from dual
connect by rownum <= length(str) - length(replace(str, ',', '')) + 1;
end;

Я довольно новичок в PL / SQL и раньше был парнем из T-SQL. Я действительно не уверен, как использовать переменную после поиска так много статей. Просто нужна помощь, чтобы научить меня использовать объявленные переменные.

1 Ответ

0 голосов
/ 05 октября 2019

Переменная помогает сохранить результат запроса на выборку, но это зависит от того, дает ли запрос на выборку одну или несколько строк в качестве выходных данных.

Репликация запроса, как показано ниже:

1.

     DECLARE
        str VARCHAR2(100);
        result VARCHAR2(100);
        BEGIN
        str := 'first,last,middle';
        SELECT str INTO result FROM dual;
        dbms_output.put_line('str: '||result);
        END;
        /

2. As your SELECT query is producing more than one row it can not be assigned into a scalar variable.

DECLARE 
    str VARCHAR2(100);
    BEGIN
    FOR I IN(
    WITH TEST AS
    (SELECT 'first,last,middle' AS str FROM dual)
    SELECT regexp_substr(str, '[^,]+', 1, ROWNUM) AS separatedstr
    FROM TEST
    CONNECT BY ROWNUM <= LENGTH(str) - LENGTH(REPLACE(str, ',', '')) + 1) LOOP
    dbms_output.put_line(I.separatedstr);
    END LOOP;
    END;
    /

Надеюсь, это поможет.

...