powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с типом numeric
12 сообщений из 12, страница 1 из 1
Проблема с типом numeric
    #35269804
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В хранимой процедуре делаю вставку строки.
Для теста создал пару доменов, последовательность, и таблицу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE DOMAIN orders.d_int
  AS integer
  DEFAULT  0 
  NOT NULL;
ALTER DOMAIN orders.d_int OWNER TO postgres;

CREATE DOMAIN orders.d_num10_2
  AS numeric( 10 , 2 )
  DEFAULT  0 
  NOT NULL;
ALTER DOMAIN orders.d_num10_2 OWNER TO postgres;

CREATE SEQUENCE orders.gen_test
  INCREMENT  1 
  MINVALUE  1 
  MAXVALUE  9223372036854775807 
  START  1 
  CACHE  1 ;
ALTER TABLE orders.gen_test OWNER TO postgres;

CREATE TABLE orders.test1
(
  nid integer NOT NULL DEFAULT  0 ,
  mynum orders.d_num10_2 NOT NULL DEFAULT  0 ,
  CONSTRAINT p_test1_nid PRIMARY KEY (nid)
)
WITH (OIDS=FALSE);
ALTER TABLE orders.test1 OWNER TO postgres;

В ХП делаю вставку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE OR REPLACE FUNCTION orders.p_test3(IN lnnum orders.d_num10_2, OUT lnid orders.d_int)
  RETURNS orders.d_int AS
$BODY$begin
lnid=nextval('orders.gen_test');
insert into orders.test1 (nid,mynum) values (lnid,lnnum); 
end$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION orders.p_test3(orders.d_num10_2) OWNER TO postgres;

Из клиента VFP9 Делаю вызов
Код: plaintext
1.
2.
LOCAL aaa
  aaa= 32131 . 21 
  llOk=SQLEXEC(lnHand,'SELECT * FROM orders.p_test3(?aaa)',"tCurRet")
И получаю ошибку
"Connectivity error: ERROR: function orders.p_test3(double precision) does not exist;
Error while executing the query"

Если в вызов написать
Код: plaintext
llOk=SQLEXEC(lnHand,'SELECT * FROM orders.p_test3(12345.12)',"tCurRet")
Тогда вставка происходит. Куда смотреть?

Истина где-то там...
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35269814
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно проблема в ODBC
Если кто сталкивался, плиз хелп ми.

Истина где-то там...
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35269816
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со всякими одбц не работал, но можно попробовать так
Код: plaintext
1.
2.
LOCAL aaa
  aaa= 32131 . 21 
  llOk=SQLEXEC(lnHand,'SELECT * FROM orders.p_test3(CAST(?aaa AS numeric))',"tCurRet")
Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35269835
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Угу, так работает. Можно и так написать
Код: plaintext
1.
2.
LOCAL aaa
aaa= 32131 . 21 
llOk=SQLEXEC(lnHand,'SELECT * FROM orders.p_test3(?aaa::numeric)',"tCurRet")

Но вот нехотелось бы таких лишних телодвижений

Истина где-то там...
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35269843
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь вот еще одна проблема. При выборке на клиента.
Формат данных приходит NUMERIC(20,0) Хотя установлен NUMERIC(10,2)

Блин, если не найду решение, придется искать другой SQL server :(

Истина где-то там...
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35269866
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В ходе научного тыка выяснил такую деталь.
Если размерность увеличить сделать NUMERIC(14,2)
а до этого было NUMERIC(10,2) то в VFP приходит тип NUMERIC(16,2)
что уже приемлимо.

Надеюсь есть еще какие-то настройки, что бы при вставке обойти
конкретное указание типа.

Истина где-то там...
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35269941
iz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iz
Гость
не совсем в тему, но ремарка: numeric рекомендуется использовать для вычислений с произвольной точностью (превосходящей точность обыкновенных численных типов), при этом работа с ним медленее, чем с ограниченными численными типами. так что круг задач, в которых его нужно использовать весьма узок.
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35269992
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izне совсем в тему, но ремарка: numeric рекомендуется использовать для вычислений с произвольной точностью (превосходящей точность обыкновенных численных типов), при этом работа с ним медленее, чем с ограниченными численными типами. так что круг задач, в которых его нужно использовать весьма узок.

Ну не такой уж и узкий этот круг. Хранение денежных сумм в БД, думаю, частое явление :) И именно для этого numeric и рекомендуется:
Код: plaintext
It is especially recommended for storing monetary amounts and other quantities where exactness is required.

А вот то, что медленный, это да.
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35270055
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriesТеперь вот еще одна проблема. При выборке на клиента.
Формат данных приходит NUMERIC(20,0) Хотя установлен NUMERIC(10,2)

Блин, если не найду решение, придется искать другой SQL server :(

Истина где-то там...
Хренова фокс работает с ODBC от PgSQL. И ничем это не лечится. (Версией, точно).
1. С параметрическими запросами. Фокс засылает что-нибудь типа 10.0, ODBC задает параметру Double Precision. Ладно, вы на функции словили, на выборках страшнее. Говоришь ему "SELECT FROM WHERE id = ?aaa" Pg сначала преобразует id в Double, затем уже сравнивает с aaa. Тормоза дикие. Стоит сразу привыкать писать: "SELECT FROM WHERE id = ( ?aaa )::Int4"
2. CREATE SQL VIEW - почему-то Fox не распознает данные о колонках View, которые ему ODBC возвращает, поэтому при создании вьюшки часто тягается весь запрос с сервера, исключая WHERE.
3. В сквозных запросах не всегда возвращается то, что ты от сервера ожидаешь:
SELECT '1'::VARCHAR(20) UNION ALL SELECT '2'::VARCHAR(20) в линейке 8.х возвращает TEXT. Хотьапстену убейся. Поэтому для вьюшков и курсорадаптеров лучше сразу прописывать схему, иначе огрести граблей легко.
Хотя, когда все грабли известны, их обходишь уже автопилотом.
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35270146
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Numeric у меня используется только для хранения денежных сумм.

Kruchinin Pahan Хренова фокс работает с ODBC от PgSQL. И ничем это не лечится. (Версией, точно).

Так может пока не начался проект посмотреть в сторону другого SQL сервера?
А то сильно уж проблем много.

Истина где-то там...
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35270171
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriesNumeric у меня используется только для хранения денежных сумм.

Kruchinin Pahan Хренова фокс работает с ODBC от PgSQL. И ничем это не лечится. (Версией, точно).

Так может пока не начался проект посмотреть в сторону другого SQL сервера?
А то сильно уж проблем много.

Истина где-то там...
Проблемы с любым будут. Фокс более/менее адекватен с MsSQL. Но там есть свои фишки, которые тоже знать нужно. У меня связка Pg-ODBC-Fox работает с 2003 года. Никаких особых сложностей я не заметил. Особенности Pg прочухал за пару месяцев. Иногда напрягает, что Pg от версии к версии слегка меняет поведение, но решалось, в основном, на стороне сервера. Приложение за 4 года ни разу серьезно не пострадало ;)
...
Рейтинг: 0 / 0
Проблема с типом numeric
    #35270227
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё что через ODBC, всё так работает... Я вот через Delphi на те же грабли наступаю... А сам сервер мне очень нравится... Я долго выбирал между бесплатными и остановлся на Postgres, хотя можно рассмотреть ещё FireBird, но там хранимые процедуры и тригера убогие...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с типом numeric
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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