2016-01-18 4 views
0

Я пытаюсь вызвать хранимую процедуру из другой хранимой процедуры. Я пробовал использовать другой синтаксис, но без успеха.AS400 Вызовите хранимую процедуру из другой хранимой процедуры

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

Первая хранимая процедура (SP01):

BEGIN 
DECLARE C2 CURSOR WITH RETURN FOR 

SELECT DISTINCT TBL.* 
FROM LIB.TABLE1 TBL; 

OPEN C2 ; 
END 

Он отлично работает при вызове его из C#.

Вторая хранимая процедура (SP02):

BEGIN 
DECLARE C2 CURSOR WITH RETURN FOR 

CALL SP01(); 

OPEN C2 ; 
END 

Я получаю сообщение об ошибке:

Vendor Code: -104
Message: [SQL0104] Token SP01 was not valid. Valid tokens: ;. Cause ....
A syntax error was detected at token SP01.

Что такое правильный синтаксис/подход для SP02?

EDITED:

В доступе мс, я был в состоянии создать QUERY2 запроса на основе другого QUERY1 запроса:

SELECT * FROM QUERY1; 

или даже присоединиться к нему, как стол

SELECT * FROM TABLE1 INNER JOIN QUERY1 ON (TABLE1.FIELD1 = QUERY1.FIELD1); 

I необходимо переместить все мои таблицы и запросы из mdb в AS400 и написать приложение C#, которое использует эти запросы.

Я не вижу столько примеров в сети, может быть, мой подход неправильный. У меня есть несколько запросов для запуска, и каждый зависит от другого. Я подумал о вызове одной хранимой процедуры из своего приложения на C#, и этот вызов вызовет другой и т. Д. Правильно ли вы запускаете ряд запросов, которые зависят друг от друга?

Или есть способ вызвать из моего приложения C# все запросы независимо друг от друга и из кода, чтобы построить зависимость между ними, похоже, что этот подход неверен?

+0

shoud'nt это будет '' Exec sp02''? –

+0

база данных? MySQL? Oracle? MS SQLServer? – rdn87

+0

@ rdn87 База данных AS400 – ehh

ответ

1

Если вы используете IBM i версии 6.1 или более раннюю версию, вы не можете получить доступ к наборам результатов, возвращаемым хранимой процедурой, используя хранимую процедуру SQL SQL. Для версии 7.1 или более поздней версии вы можете использовать оператор ASSOCIATE RESULT SET LOCATORS для извлечения наборов результатов. Для получения дополнительной информации см. Инструкцию ASSOCIATE LOCATORS в справочном руководстве SQL (http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_71/db2/rbafzassocloc.htm?lang=en).

Как только у вас есть локатор, вы используете инструкцию ALLOCATE CURSOR (http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzalloccsr.htm?lang=en), чтобы получить курсор из LOCATOR RESULT SET.

Другие примеры можно найти здесь: http://www.itjungle.com/fhg/fhg082510-printer02.html

+0

Благодарим за помощь – ehh