Вложенное начало в файле сценария, переполнение стека во время выполнения сценария - PullRequest
0 голосов
/ 13 июля 2010

Недавно у меня появилось требование создать файл скрипта из таблицы Excel. Я в состоянии выполнить задачу почти. Но проблема в том, что использование локальных переменных больше в файле сценария. Выполняется больше локальных переменных, во время выполнения файла сценария в toad выдается ошибка PL / SQL 102 Исключение переполнения стека во время вставки сценария. Вот синтаксис

"declare Q2 integer;
begin
select table1_seq.nextval into Q2 from dual;
insert into table1 values(Q2,sysdate,'BATCH',sysdate,'BATCH',sysdate,'BATCH',2,'N',null,null);
insert into table2 values(Q2,table2_seq.nextval,sysdate,'BATCH',sysdate,'BATCH',sysdate,'BATCH',2,'BLAH','Y',null,null);
"

Обратите внимание, что в приведенном выше коде у меня не было "end;" заявление после объявления «Q2» Причина в том, что я хочу область действия этой переменной 'Q2', доступную до конца.

В рамках Q2 у меня может быть другое объявление A1 A2

Что-то похожее на это

Declare Q1 int;
Begin
 Insert()
       Declare A1 int;
         Begin
            Insert()
               Declare S1 int;
                  Begin
                     insert()......
           ........................
           .......................
           End;
           End;
           End;

В приведенном выше примере у меня может быть 100-300 vairbales, так как он выглядит как вложенный, появляется ошибка из-за стека вложений. Если это так, есть ли возможность увеличить уровень вложенной глубины, чтобы он анализировал все вариации скрипта. Или есть ли причина переполнения стека.

, хотя у меня нет вложенных IF или For Loops, которые выходят за рамки. Но в моем файле скрипта при запуске я получаю «Ошибка переполнения стека». Будет ли описанная выше ситуация также попадать во вложенный случай. Пожалуйста, помогите мне как можно скорее.

-Mahender

1 Ответ

0 голосов
/ 13 июля 2010

«Объявить» не используется для каждой переменной, оно означает начало «блока объявления».

DECLARE
    Q1 INTEGER;
    A1 INTEGER;
    S1 INTEGER;
    ...
BEGIN
    INSERT INTO foo.table_name (...) VALUES (...);
    ...
END;
/

Вы помещаете все объявления переменных между DECLARE и BEGIN, а весь код между BEGIN и END.

Это не значит, что вы не можете вкладывать анонимные блоки, просто вы, кажется, неправильно понимаете значение DECLARE keword.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...