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

Код: 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
SQLState 22002
    #33853697
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже, что то, что вызывает эту процедуру, делает это неправильно.
В самой процедуре ничего сделать нельзя.
Попробуйте сделать вызов из CLP типа:
Код: plaintext
CALL FU_EVAL_SHARE ( 1 , current timestamp,  1 , ?, ?, ?);
Оно отработает нормально.
...
Рейтинг: 0 / 0
SQLState 22002
    #33853762
м.б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INOUT ?
...
Рейтинг: 0 / 0
SQLState 22002
    #33853790
из delphi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а что за вызов такой из delphi? какой класс? и что значит 2-ой параметер?
...
Рейтинг: 0 / 0
SQLState 22002
    #33853811
ValPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A нельзя ли ссылочку на пример адекватного случаю вызова из С ( или идеально Delphi ), что-бы показать местному системщику, который про DB2 ни ухом ни рылом, но с другими БД справился.
...
Рейтинг: 0 / 0
SQLState 22002
    #33854096
ValPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 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
SQLState 22002
    #33854314
из delphi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
из delphi можно работать через набор ADO-классов
ADOConnection + ADOStoredProc.
если будет глючить ExecProc, Open или задание параметров, то перед
этим нужно
try
FMyStp.Parameters.Refresh;
except
end
...
Рейтинг: 0 / 0
SQLState 22002
    #33854798
ValPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До 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
SQLState 22002
    #33855189
из delphi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в каком смысле управлять?
почему не можете применить например
...
FMyDBXStorProc:TSQLStoredProc // это для DBExpress
...
(* если устанавливать в NULL, лучше явно указать тип *)
FMyDBXStorProc.ParamByName('SHARE').DataType := ftInteger;
FMyDBXStorProc.ParamByName('SHARE').Value := NULL;


аналогично любой другой класс, работающий с StoredProc
...
Рейтинг: 0 / 0
SQLState 22002
    #33855232
ValPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А просто 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
SQLState 22002
    #33855249
........
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и из BDE все работает аналогично
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQLState 22002
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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