2014-12-24 3 views
0

Проблема, с которой я столкнулся, заключается в том, что я должен вызвать одну хранимую процедуру из другой хранимой процедуры в базе данных DB2. Добрый пример, который я даю ниже.Вызов одной хранимой процедуры в другую хранимую процедуру в DB2

У меня есть одна хранимая процедура:

CREATE OR REPLACE PROCEDURE Proc1() 
IS  
    Declare myName in varchar; 
BEGIN 
    Select fname into myName from student where fname='x'; // is returning unique value 
    -- here call anoher proc2 
END; 

Теперь так эта процедура proc1 собирается вызвать эту процедуру proc2.

Теперь я второй хранимая процедура:

CREATE OR REPLACE PROCEDURE Proc2(Name in varchar) 
IS 
BEGIN 
    -- do anything 
END; 

ответ

1

Я решил эту проблему, Так решение, как если мы хотим выполнить процедурный с помощью SQL команды, то Синтекс как ниже,

call Proc2('My Name'); 

Мы также можем использовать этот же подход внутри нашего proc. Для этого мы должны выполнить несколько шагов. Допустим, что наш вышеупомянутый вызов sql - это оператор, который мы хотим выполнить. мы собираемся преобразовать этот оператор в String и передать необходимый параметр путем согласования значений переменных. Затем выполните инструкцию.

CREATE OR REPLACE PROCEDURE Proc1() 
IS 
    Declare myName in varchar; 
    -- stmt variable is to execute our proc 
    STMT VARCHAR(4000); 
BEGIN 
    Select fname into myName from student where fname='x'; // is returning unique value 
    -- this is our logic 
    STMT :='call Proc2('||myName||')'; 
    EXECUTE IMMEDIATE STMT; 
END; 
+0

Вы должны иметь возможность использовать 'call Proc2 (myName)', не прибегая к динамическому SQL, как описано в вашем собственном ответе. Вы не можете это сделать? Какая у вас ошибка? –

+0

, когда я это делаю, вызываю 'Proc2 (myName)' он не дает proc, найденного с такими аргументами. Я почти пробовал все варианты, которые я могу думать, но не удалось. – JBaba

+0

Вы должны определенно проверить, в какой схеме были созданы ваши процедуры, и что такое 'CURRENT PATH' для каждой процедуры (т. Е. Когда вы создаете' PROC2', убедитесь, что 'CURRENT PATH' содержит схему, в которой существует эта процедура. , полностью квалифицируйте процедуру, то есть 'call schema.proc2 (myName)' –

Смежные вопросы