2015-09-24 3 views
-1

Ошибка (8,5): PLS-00103: * & = - + < /> в в это цикл мод: Столкнутые когда ожидается одно из следующих действий символ «BEGIN» остаток не стоит <> или! = или ~ => = < = <> и или как LIKE2_ LIKE4_ LIKEC_ между перекрытиями || multiset year DAY_ member SUBMULTISET_ Символ «loop» заменен на «BEGIN» для продолжения.не в состоянии решить эту хранимую процедуру, ошибку

Ошибка (10,6): PLS-00103: встречается символ «SET» при ожидании одного из следующих:;; вернуться возвращение

Здесь процедура:

Create or replace PROCEDURE test_dates (start_date DATE, end_date DATE) AS 

Begin 
    start_date := '01-JAN-2016'; 
    end_date := '31-DEC-2016'; 

    while (start_date < end_date) 
    Begin 
    INSERT INTO test_ro_kalendar(datum) VALUES(start_date) 
    SET start_date = DATEADD(DAY, 1, start_date) 
    end 
end 
+0

Что вы пытаетесь достичь с помощью этого кода? – Ollie

+0

Если вы хотите включить 31-е место в таблице за год, вам нужно будет изменить (start_date

ответ

0

Попробуйте использовать LOOP:

Create or replace PROCEDURE test_dates (start_date DATE, end_date DATE) AS  
Begin 
    start_date := '01-JAN-2016'; 
    end_date := '31-DEC-2016'; 

    while (start_date < end_date) 
    loop 
     INSERT INTO test_ro_kalendar(datum) VALUES(start_date) 
     SET start_date = DATEADD(DAY, 1, start_date) 
    end loop 
end; 

Однако ваш код действительно странно. Если вы передаете даты в качестве параметров, почему вы устанавливаете их перед циклом?

0

Oracle не позволяет использовать входной аргумент в качестве цели назначения. Нам также нужно любое условие выхода, чтобы сделать его определенным циклом (не инфинитивным). Для этого берется дополнительная переменная sdate.

Create or replace PROCEDURE test_dates (start_date DATE, end_date DATE) AS 
sdate date:=start_date; 
Begin 

    while (sdate < end_date) 
    loop 
     INSERT INTO test_ro_kalendar(datum) VALUES(sdate); 
     s_date:=trunc(sdate)+1; 
    end loop 
end; 
Смежные вопросы