powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Хранимые процедуры
20 сообщений из 20, страница 1 из 1
Хранимые процедуры
    #32120896
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто нибудь объяснить по шагам как создать SP в DB2 7.2 EE.
Например:
Таблица A(a1 int)
Хранимая процедура должна вернуть количество строк, в которых поле а1
равно какому-то параметру.

Если можно расскажите разные варианты: SQL, C, Java. Что лучше?

Спасибо!
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32121010
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С+ - + вся мощь WinAPI и DB2 API. Все в твоих руках - оптимизация, запуск параллельных процессов, управление памятью и т. д.
- исходники хранятся отдельно от БД, т.е. некоторые проблемы с backup/restore
SQL - + простой, но мощный процедурный язык. Фирменный построитель с возможностью отладки.
- отсутствие доступа к WinAPI , ограниченный DB2 API (только работа с таблицами)
JAVA - + фирменный построитель с возможностью отладки.
- некоторая тормознутость и ресурсопрожорливость по сравнению с C+ и SQL.
На счет WinAPI и DB2 API точно не знаю. Но возможностей никак не меньше чем у SQL.
В v 7.2 допускаются вложенные ХП, но только если они одного типа. В v 8 это уже побеждено.
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32121315
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если можно, примеры!

А, что такое "Фирменный построитель с возможностью отладки" для SQL, где его взять?

Спасибо!
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32121649
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBM DB2 Store Procedure Builder идет в комплекте поставки DB2 v 7.1 и выше в v 8 переименован в центр разработки. Верно по крайней мере для WorkGroup for Win и Personal Edition.
Вот пример SQL ХП: принимает целое положительное число, создает временную таблицу и записывает туда числа - степени 2, сумма которых дает исходное число. Возвращает на клиент открытый курсор на созданную таблицу.

CREATE PROCEDURE DB2ADMIN.Proc1 ( IN P_ID INTEGER )
RESULT SETS 1
LANGUAGE SQL
------------------------------------------------------------------------
-- SQL Stored Procedure
------------------------------------------------------------------------
P1: BEGIN
DECLARE L_MD INTEGER;
DECLARE L_MS INTEGER;
DECLARE GLOBAL TEMPORARY TABLE SESSION.ID (
ID INTEGER)
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

WHILE P_ID > 0 DO
SET L_MD = MOD(P_ID,2);
SET P_ID = P_ID / 2;
SET L_MS = VALUE(L_MS + L_MS,1);
IF L_MD = 1 THEN
INSERT INTO SESSION.ID VALUES L_MS;
END IF;
END WHILE;

P2: BEGIN
-- Declare cursor
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT * FROM SESSION.ID;

-- Cursor left open for client application
OPEN cursor1;
END P2;
END P1
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32121810
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Брат! Уточни - у тебя какой сервер под Линуксами или под Виндой?
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32121943
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman << DB2 v 7.2 и Windows 2000, клиент Windows 2000

Я пытаюсь выполнить на клиенте, в "Командном центре" следующее:

CREATE PROCEDURE COUNT_FROM_A (IN S_A1 INTEGER, OUT A_COUNT INTEGER)
LANGUAGE SQL
BEGIN
SELECT COUNT(*) INTO A_COUNT FROM A WHERE A1 = S_A1;
END

На что получаю:

SQL0104N Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "OM A WHERE A1 = S_A1". Список правильных элементов: "<psm_semicolon>". LINE NUMBER=6. SQLSTATE=42601

и

SQL0104N Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "END". Список правильных элементов: "JOIN <joined_table>". SQLSTATE=42601

В чем ошибки?
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32121951
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прошения. Речь шла о DB2 for Win. Но пример ХП SQL - межплатформенный :).
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32121956
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прошения. Речь шла о DB2 for Win. Но пример ХП SQL - межплатформенный :).
2 oleg_e
метка перед begin и после end см. пример
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32122027
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не обязательно. Если честно, даже не вижу, откуда там могла взяться ошибка, кроме как с типами (какого типа A.A1?) может быть что-то напутано или в синтаксисе ошибки...
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32122048
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка там, ошибка :)
проблема заклюсчается в том, что один и тот же разделитеть ";" используется и в spl, и в командном центре
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32122128
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага!... ;) Вот она где собака порылась... ;) Я-то пользуюсь в основном Command Line Processor... Да и с типами все понятно, это я первое сообщение не разглядел...

> oleg_e

SQL:
Код: plaintext
1.
2.
3.
4.
create procedure PROC_SQL (in inA1 int, out outCount int)
language sql
begin
  select count(*) into outCount from A where A1 = inA1;
end


Java (JDBC):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import java.sql.*;

public class Proc_jdbc
{
    public static void proc_jdbc (
        int inA1,
        int[] outCount)
    throws
        SQLException,
        Exception
    {
        Connection conn = DriverManager.getConnection( "jdbc:default:connection" );
        ResultSet rs = conn.createStatement().executeQuery(
             "select count(*) from A where A1 = "  + inA1);
        while (rs.next()) outCount[ 0 ] = rs.getInt( 1 );
        if (rs != null) rs.close();
        if (conn != null) conn.close();
    }
}


Java (SQLJ)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
import java.sql.*;

public class Proc_sqlj
{
    public static void proc_sqlj (
        int inA1,
        int[] outCount)
    throws
        SQLException,
        Exception
    {
        #sql {select count(*) into :(outCount[ 0 ]) from A where A1 = :inA1};
    }
}


Текст SQL-процедур сначала переводится в C, потом уж процедура билдится и подлинковывается... В случае выбора Java - JDBC гибче, но SQLJ эффективней и проще... Так как можно их смешивать, то лучше писать по возможности используя SQLJ, а если прижмет надобность - тогда уж JDBC...
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32122236
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С этим вопросом разобрались, БОЛШОЙ-БОЛШОЙ спасиба!
Если писать без переносов строки, то работает, но ошибка в другом:
Не удалось загрузить указанную библиотеку DLL
"С:\PROGRA~1\SQLLIB\function\db2udp.dll"


А, скажите пожалуйста, что дальше делать с текстом на C или Java, их нужно транслировать, компиллировать и т.п. или что? :-[
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32122270
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, распечатать и в рамку!
у тебя ж dll-ка не собралась. вот и смотри в лог, почему она не собралась.
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32122693
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
распечатать и в рамку! - полчаса смеялся :)).
Но я действительно не знаю что делать.
Кто-нибудь может, если не лень, объяснить по шагам как, все таки, создать хранимую процедуру с начала - до конца?
Если лень, то может скажете где прочитать?
:)
Спасибо!
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32123286
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как нибудь выложу makefile-ы, шаблоны и скрипты для создания ХП под виндйи и линуксами. Некогда щас.
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32124138
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ВСЕМ!

Поставили Store Procedure Builder, кое-как заработала!
Надо почитать Java!

На SQL и С не получилось, наверное потому, что нету С-компиллятора!
:-)

Пока всё!
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32124395
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На SQL и С не получилось, наверное потому, что нету С-компиллятора

Текст SQL-процедур сначала переводится в C, а потом уж билдится - т.е., таки да, нужен С-компилер какой-нибудь... ;) У нас стоит MS VC++ 6.0...

Для Java в стандартную поставку входит JDK (SQLLIB\java\jdk), старенький, правда, но это не так уж и критично, и ставить дополнительно ничего не надо... Теоретически, даже SPB не нужен, но с ним проще... ;)
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32127307
vlad_pivkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ли использование SP непосредственно в запросе?
Если можно, то простенький пример пожалуйста.
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32127416
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя. Для этого существуют функции.
...
Рейтинг: 0 / 0
Хранимые процедуры
    #32127496
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> vlad_pivkin

В запросе - только UDF...
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Хранимые процедуры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]