Я изучаю создание хранимой процедуры в Oracle 11g, и я использую SQL Developer. Когда я запускал инструкцию отдельно, они работают, но когда я группирую их вместе в хранимую процедуру и добавляю некоторый цикл, я получил ошибку, которую я не могу понять. Мне не повезло, когда мы пытались найти решение в сети, поэтому надеемся, что кто-либо на этом форуме может предложить некоторые советы. Спасибо!Oracle 11 g Объявить ошибку
create or replace PROCEDURE InputAddr AS
DECLARE v_TotalCount INT;
BEGIN
-- this insert statement is correct and ran just fine
INSERT INTO table1 (column1,colum2,colum3,...)
SELECT column11,column12,column13,...
FROM table2
-- counting how many records have been inserted into table1
select count(*) into v_totalcount
from table1
-- loop the process
IF v_totalcount >= 1000
THEN
WHILE v_TotalCount >= 1000
LOOP
DECLARE
P_NAME VARCHAR2(200);
P_DESCRIPTION VARCHAR2(200);
P_COUNTRY VARCHAR2(200);
BEGIN
P_NAME := 'TEST FILE';
P_DESCRIPTION := 'TEST FILE DESC';
P_COUNTRY := 'USA';
INSTANTADDRESS.SENDADDRESSES (P_NAME, P_DESCRIPTION, P_COUNTRY);
COMMIT;
END;
END LOOP;
ELSE
-- less then 1000 run the same codes once
DECLARE
P_NAME VARCHAR2(200);
P_DESCRIPTION VARCHAR2(200);
P_COUNTRY VARCHAR2(200);
BEGIN
P_NAME := 'TEST FILE';
P_DESCRIPTION := 'TEST FILE DESC';
P_COUNTRY := 'USA';
INSTANTADDRESS.SENDADDRESSES (P_NAME, P_DESCRIPTION, P_COUNTRY);
COMMIT;
END;
END IF
END;
Здесь ошибка после компиляции этой процедуры:
Error(3,4): PLS-00103: Encountered the symbol "DECLARE" when expecting
one of the following: begin function pragma procedure subtype type
<an identifier> <a double-quoted delimited-identifier> current cursor
delete exists prior external language
Если я устранил DECLARE я получил еще больше ошибок: Ошибка (39,15): PLS-00201: идентификатор ' INSTANTADDRESS.SENDADDRESSES "должно быть объявлено Ошибка (39,15): PL/SQL: заявление игнорируется Ошибка (55,11): PLS-00201: идентификатор« INSTANTADDRESS.SENDADDRESSES »должен быть объявлен Ошибка (55,11): PL/SQL: заявление игнорируется Ошибка (67,13): PLS-00201: идентификатор «INSTANTADDRESS.GETADDRESSESRESULT» должен быть объявлен Ошибка (67,13): PL/SQL: заявление игнорируется. Кстати, я добавил все; Спасибо!! – MGL
Проверьте, есть ли у пользователя привилегия EXECUTE на процедурах/функциях: INSTANTADDRESS.SENDADDRESSES, INSTANTADDRESS.GETADDRESSESRESULT и т. Д. –
Как я могу проверить эту привилегию? Я знаю, что меня сделали администратором – MGL