Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / объясните, что не так с процедурой / 8 сообщений из 8, страница 1 из 1
21.10.2009, 08:46
    #36263335
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объясните, что не так с процедурой
Сделал вот такую процедуру для распарсивания строки адреса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE PARSE_ADDR (IN ADDR VARCHAR( 255 ), OUT ZIP VARCHAR( 6 ), OUT REGION VARCHAR( 64 ))
RESULT SETS  1 
LANGUAGE SQL
BEGIN
   DECLARE POS Int;
   SET POS = POSSTR(ADDR, ',');
   SET ZIP = SUBSTR(ADDR,  1 , POS- 1 );
   SET ADDR = RIGHT(ADDR, LENGTH(ADDR)-POS);
   SET POS = POSSTR(ADDR, ',');
   SET REGION = SUBSTR(ADDR,  1 , POS- 1 );
   RETURN;
END

Скрипт создания процедуры выполнился. Вижу процедуру в нужной схеме (пользуюсь SQL manager 2007 for DB2). Но, когда захожу в процедуру, то получаю, что input params у меня 2, ZIP и REGION, а output params нет вообще.

Что я не так делаю?

PS. Процедуру в DB2 пытаюсь сделать в первый раз, поэтому, возможно, не так сделал вообще все.
...
Рейтинг: 0 / 0
21.10.2009, 10:26
    #36263532
Vladimir Kiselev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объясните, что не так с процедурой
Павел Гужанов,

Всё работает. Создавать надо переопределив терминатор строки, в моём примере это "@".
Запускать скрипт создания процедуры, например, так:
Код: plaintext
db2 -c- -td@ -f SCRIPTNAME.CPC

Файл SCRIPTNAME.CPC:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CONNECT TO BDALIAS@

CREATE PROCEDURE PARSE_ADDR (IN ADDR VARCHAR( 255 ), OUT ZIP VARCHAR( 6 ), OUT REGION VARCHAR( 64 ))
RESULT SETS  1 
LANGUAGE SQL
BEGIN
   DECLARE POS Int;
   SET POS = POSSTR(ADDR, ',');
   SET ZIP = SUBSTR(ADDR,  1 , POS- 1 );
   SET ADDR = RIGHT(ADDR, LENGTH(ADDR)-POS);
   SET POS = POSSTR(ADDR, ',');
   SET REGION = SUBSTR(ADDR,  1 , POS- 1 );
   RETURN;
END@

COMMIT@

CONNECT RESET@

Проверяю так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CONNECT TO BDALIAS;

CALL PARSE_ADDR('114577,REGION,MOSCOW',?,?);

ROLLBACK;

CONNECT RESET;


Результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CALL PARSE_ADDR('114577,REGION,MOSCOW',?,?)

  Значение выходных параметров
  --------------------------
  Имя параметра   : ZIP
  Значение парам. :  114577 

  Имя параметра   : REGION
  Значение парам. : REGION

  Статус возврата =  0 
...
Рейтинг: 0 / 0
21.10.2009, 11:01
    #36263632
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объясните, что не так с процедурой
db2 -c- -td@ -f SCRIPTNAME.CPC - это, если я правильно понял, батник запуска скрипта?
Он у меня запускается, но процедура не создается. Может быть в скрипте надо при коннекте указать логин и пароль? Если да, то как это указать?
...
Рейтинг: 0 / 0
21.10.2009, 11:36
    #36263763
Vladimir Kiselev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объясните, что не так с процедурой
Павел Гужанов,

Если БД внешняя или в другой инстанции указывается логин и пароль при коннекте:

Код: plaintext
1.
CONNECT TO <alias> USER <user> USING <password>
Здесь подробнее
...
Рейтинг: 0 / 0
21.10.2009, 11:43
    #36263785
Vladimir Kiselev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объясните, что не так с процедурой
Павел Гужановdb2 -c- -td@ -f SCRIPTNAME.CPC - это, если я правильно понял, батник запуска скрипта?

Да. При запуске возвращается код ошибки после выполнения. В Вашем случае, если процедура не создалась, например, не введён логин/пароль, должна выдаваться ошибка, у меня она выглядит так:
Код: plaintext
1.
2.
3.
CONNECT TO DBALIAS
SQL30082N  Обработка защиты завершилась неудачно из-за причины "3" ("PASSWORD 
MISSING").  SQLSTATE= 08001 

Чтобы посмотреть описание ошибки надо ввести команду (по SQLCODE):
Код: plaintext
1.
db2 ? SQL30082N
либо по SQLSTATE, тогда такую (но здесь информации может быть меньше):
Код: plaintext
1.
db2 ?  08001 

При успешном выполнении получаем такой код:

Код: plaintext
1.
DB20000I  Команда SQL выполнена успешно.
...
Рейтинг: 0 / 0
21.10.2009, 12:16
    #36263900
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объясните, что не так с процедурой
пробовал разные варианты коннекта:

Код: plaintext
CONNECT TO BDAlias USER user_1 USING Pass_1;

Код: plaintext
CONNECT TO ServetName:PortNumber USER user_1 USING Pass_1;

Код: plaintext
CONNECT TO ServetName:PortNumber:BDAlias USER user_1 USING Pass_1;

Или в строке коннекта в конце нужно не ";", а "@"?

Но во всех случаях ошибка "Произошла ошибка доступа к файлу "PARSE_ADDR.CPC"

Пробовал уазать путь к файлу в батнике, но результат тот же:

"Произошла ошибка доступа к файлу "C:\PARSE_ADDR.CPC"

Файл в корне диска C: есть точно, с именем не напутал.

Какая из срок коннекта правильная?
Почему может не быть доступа к файлу?
...
Рейтинг: 0 / 0
21.10.2009, 16:00
    #36264770
Vladimir Kiselev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объясните, что не так с процедурой
Павел Гужановпробовал разные варианты коннекта:

Код: plaintext
CONNECT TO BDAlias USER user_1 USING Pass_1;

Код: plaintext
CONNECT TO ServetName:PortNumber USER user_1 USING Pass_1;

Код: plaintext
CONNECT TO ServetName:PortNumber:BDAlias USER user_1 USING Pass_1;

Или в строке коннекта в конце нужно не ";", а "@"?

Но во всех случаях ошибка "Произошла ошибка доступа к файлу "PARSE_ADDR.CPC"

Пробовал уазать путь к файлу в батнике, но результат тот же:

"Произошла ошибка доступа к файлу "C:\PARSE_ADDR.CPC"

Файл в корне диска C: есть точно, с именем не напутал.

Какая из срок коннекта правильная?
Почему может не быть доступа к файлу?
1. Коннект по первому Вашему варианту, т.е.
Код: plaintext
CONNECT TO BDAlias USER user_1 USING Pass_1;
2. В конце строки должен быть символ терминатор, т.е тот символ, что Вы указали при запуске скрипта в ключе -td. Если -td@, то в конце должен быть символ "@". Исключение только внутри процедуры должны быть ";" не зависимо от -td
3. Ошибка доступа - причин может быть много, например, у Вас редактор блокирует файл, закройте редактор. Хотя я не понимаю с чего бы это вдруг. Попробуйте другое расширение, не cpc или другой файл.
4. Надеюсь база у Вас каталогизирована, т.е. видна по команде
Код: plaintext
1.
db2 list db directory
в противном случае коннекта не будет.
5. Надеюсь Вы выполняете скрипт из командного окна db2 в противном случае надо запускать скрипт, например, так:
Код: plaintext
db2cmd /c /w /i db2 -c- -td@ -f SCRIPTNAME.CPC
...
Рейтинг: 0 / 0
22.10.2009, 08:24
    #36265843
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
объясните, что не так с процедурой
5. Запускаю скрипт батником из командного окна DB2
4.По команде db2 list db directory база показывается
3. Насчет ошибки доступа буду разбираться
2. Терминатор в конце строки ставил ; а не @, как указано в батнике, попробую поменять.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / объясните, что не так с процедурой / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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