я написал эту простую процедуру следующую ORACLE документации для того, чтобы практиковать с PL/SQL:ORACLE - ошибка PLS-00103 в процедуре
create procedure BADGE_PROCEDURE (badges NUMBER) AS
loops NUMBER;
BEGIN
loops := badges;
loops := loops - 1;
BEGIN LOOP
insert into BADGE values (BADGE_ID_SEQUENCE.nextval, 'prova', 'prova', '01-JAN-01');
loops := loops - 1;
EXIT WHEN loops < 0;
END LOOP;
END;
/
Это мой BADGE стол:
CREATE TABLE BADGE
(badge_id NUMBER PRIMARY KEY,
name VARCHAR(20),
surname VARCHAR(20) NOT NULL,
birthday DATE);
Наконец это моя последовательность:
CREATE SEQUENCE BADGE_ID_SEQUENCE
start with 1
increment by 1
nocache
nocycle;
Однако процедура компилируется со следующей ошибкой:
LINE/COL ERROR
-------- -----------------------------------------------------------------
11/5 PLS-00103: Encountered the symbol "end-of-file" when expecting
one of the following:
(begin case declare end exception exit for goto if loop mod
null pragma raise return select update while with
<an identifier> <a double-quoted delimited-identifier>
<a bind variable> << continue close current delete fetch lock
insert open rollback savepoint set sql execute commit forall
merge pipe purge
Что я делаю неправильно?
'начинают loop' должны быть просто' loop' (не 'begin'), если я правильно помню .. – sstan
Вы правы ! Моя ошибка – user3610096
Кроме того, если вы добавляете дату в столбец/переменную DATE, пожалуйста, ПОЖАЛУЙСТА, сначала преобразуйте ее в ДАТУ. В настоящее время вы пытаетесь вставить строку, которая заставляет Oracle использовать параметр nls_date_format по умолчанию для вашей сессии. Это может отличаться для других сеансов, и ваш код может быть ошибкой. Гораздо лучше быть явным и использовать формат букв даты 'DATE '2001-01-01'' или использовать to_date, например:' to_date ('01/01/2001', 'dd/mm/yyyy') '. Обратите внимание, что годы имеют четыре цифры, а не два - зачем делать предположение db, когда вы можете предоставить точную информацию заранее? – Boneist