Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQLState 22002 / 11 сообщений из 11, страница 1 из 1
14.07.2006, 11:54
    #33853476
ValPot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
Есть процедура

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 create procedure FU_EVAL_SHARE (
     IN SHARE   integer,
     IN EV_DATE timestamp ,
     IN AMOUNT  numeric( 22 , 7 ),
     OUT SUMMA  numeric(  22 ,  7 ),
     OUT NKD    numeric(  22 ,  7 ),
     OUT R_DATE timestamp)

  LANGUAGE SQL
  MODIFIES SQL DATA
  BEGIN 
        SET SUMMA = 0 . 0 ;
        SET NKD = 0 . 0 ;
        SET R_DATE = '2006-01-01 00:00:00';  
  end 

Есть ее вызов из среды Delphi

Код: plaintext
1.
ExecProc( 'FU_EVAL_SHARE', 'Данные', %SHARE, %DATE, %AMOUNT, O_SUMMA, N, D );
 
Входные и выходные переменные по жизни могут принимать значение NULL.

Я получаю при значении выходного параметра NULL

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create procedure FU_EVAL_SHARE (
     IN SHARE   integer,
     IN EV_DATE timestamp ,
     IN AMOUNT  numeric( 22 , 7 ),
     OUT SUMMA  numeric(  22 ,  7 ),
     OUT NKD    numeric(  22 ,  7 ),
     OUT R_DATE timestamp)

  LANGUAGE SQL
  MODIFIES SQL DATA
  BEGIN 
        SET SUMMA = 0 . 0 ;
        SET NKD = 0 . 0 ;
 --     SET R_DATE = '2006-01-01 00:00:00';  
  end 

SQLState 22002. Что нужно предпринять, что-бы не допустить подобных эксцессов? При работе с Oracle, MSSQL, IB, подобных проблем не возникает.

Т.е как правильно определить indicator variable внутри процедуры, чтобы он не "торчал" наружу в Delphi коде, т.к. можно дописать SP но совершенно невозможно переписывать их вызовы.
...
Рейтинг: 0 / 0
14.07.2006, 12:52
    #33853697
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
Похоже, что то, что вызывает эту процедуру, делает это неправильно.
В самой процедуре ничего сделать нельзя.
Попробуйте сделать вызов из CLP типа:
Код: plaintext
CALL FU_EVAL_SHARE ( 1 , current timestamp,  1 , ?, ?, ?);
Оно отработает нормально.
...
Рейтинг: 0 / 0
14.07.2006, 13:12
    #33853762
м.б.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
INOUT ?
...
Рейтинг: 0 / 0
14.07.2006, 13:17
    #33853790
из delphi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
а что за вызов такой из delphi? какой класс? и что значит 2-ой параметер?
...
Рейтинг: 0 / 0
14.07.2006, 13:24
    #33853811
ValPot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
A нельзя ли ссылочку на пример адекватного случаю вызова из С ( или идеально Delphi ), что-бы показать местному системщику, который про DB2 ни ухом ни рылом, но с другими БД справился.
...
Рейтинг: 0 / 0
14.07.2006, 14:39
    #33854096
ValPot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
В Delphi используется класс StoredProc, который никак работать с индикаторами у меня не хочет. Он наверно ожидает, что используемый драйвер решит эту проблему. Работая с CLI в "стандартной поставке" через BDE я не вижу, что кто-то может выполнить логику обработки индикатора.

Значит пути следующие

1. Попрoбовать счастья с DBExpress.
2. Найти драйвер, более интеллектуальный чем CLI в "стандартной поставке".
3. Дописать логику класса StoredProc, включив в него недостающие элементы из процедуры -
Код: plaintext
1.
EXEC SQL CALL OUT_PARAM(:outOutParamMedian:outOutParamMedianInd); 
пример, которой описан в
SOURCE FILE NAME: samples\spclient.sqc.

Никто на дорожку ничего не присоветует?
...
Рейтинг: 0 / 0
14.07.2006, 15:25
    #33854314
из delphi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
из delphi можно работать через набор ADO-классов
ADOConnection + ADOStoredProc.
если будет глючить ExecProc, Open или задание параметров, то перед
этим нужно
try
FMyStp.Parameters.Refresh;
except
end
...
Рейтинг: 0 / 0
14.07.2006, 17:15
    #33854798
ValPot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
До ADO мы пока не дожили.
Реально BDE либо DBExpress.

Нашел с подачи VMetelica

JR19891 PATCH2=57 ADDED TO ALLOW DELPHI APPLICATIONS TO HANDLE NULL VALUES WHEN CALLING STORED PROCEDURES (AS HAPPENED IN V7)

Поставил. TStoredProc стало вести себя по другому. Но как разобраться как этим NULL сейчаc управлять?
...
Рейтинг: 0 / 0
14.07.2006, 19:51
    #33855189
из delphi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
в каком смысле управлять?
почему не можете применить например
...
FMyDBXStorProc:TSQLStoredProc // это для DBExpress
...
(* если устанавливать в NULL, лучше явно указать тип *)
FMyDBXStorProc.ParamByName('SHARE').DataType := ftInteger;
FMyDBXStorProc.ParamByName('SHARE').Value := NULL;


аналогично любой другой класс, работающий с StoredProc
...
Рейтинг: 0 / 0
14.07.2006, 20:28
    #33855232
ValPot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
А просто BDE совсем не работает?

У меня работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 create procedure FU_(  OUT SHARE   integer )
  LANGUAGE SQL
  MODIFIES SQL DATA
  BEGIN 
        SET SHARE = 1 ;
  end 
 

и ломается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 create procedure FU_(  OUT SHARE   char( 3 ) )
  LANGUAGE SQL
  MODIFIES SQL DATA
  BEGIN 
        SET SHARE ='vvv';
  end 
 

И это только с DB2.

DBExpress смогу попробовать позже, когда его прокатают на всех других БД.
...
Рейтинг: 0 / 0
14.07.2006, 20:52
    #33855249
........
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLState 22002
и из BDE все работает аналогично
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQLState 22002 / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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