Как установить переменные в цикле с оракулом?

У меня есть цикл и переменная v_rownum и я хочу установить для него значение:

        FOR donvi_rows IN v_donvi
        LOOP
            DECLARE
               v_rownum number;
            SELECT r
            INTO v_rownum
            FROM
            (SELECT ROWNUM AS r, k.Id
            FROM don_vi k
            WHERE k.ParentId = 1 )
            WHERE Id = donvi_rows.Id;

        END LOOP;

Но это исключение:

PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:

   begin function pragma procedure subtype type <an identifier>
   <a double-quoted delimited-identifier> current cursor delete
   exists prior
The symbol "begin" was substituted for "SELECT" to continue.

В настоящее время я изучаю Oracle. Я не знаю много об этом. Пожалуйста, помогите мне решить мою проблему.

2 ответа

Решение

В Oracle вам нужно объявить все ваши переменные в верхней части блока перед BEGIN:

DECLARE
    ... variable declarations
BEGIN
    ... program logic
END;

Ваш код должен выглядеть примерно так:

DECLARE 
    v_rownum number;
    CURSOR v_donvi IS
      SELECT * FROM whatever;
    ... any other declarations
BEGIN
    FOR donvi_rows IN v_donvi
    LOOP
        SELECT r
          INTO v_rownum
          FROM (
            SELECT ROWNUM AS r, k.Id
            FROM don_vi k
            WHERE k.ParentId = 1
          )
          WHERE Id = donvi_rows.Id;
    END LOOP;
END;

Как твоя учеба?;) Я использую это:

DECLARE
    q NUMBER;
        BEGIN
            q := &x;
            for x IN 1 .. q LOOP

Попробуй это

    FOR donvi_rows IN v_donvi
    LOOP
        DECLARE
           v_rownum number;
        BEGIN
           SELECT r
           INTO v_rownum
           FROM
           (SELECT ROWNUM AS r, k.Id
           FROM don_vi k
           WHERE k.ParentId = 1 )
           WHERE Id = donvi_rows.Id;
        END;
    END LOOP;
Другие вопросы по тегам