Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: лажа с типами в хранимой процедуре на FB  (Прочитано 21941 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« : 11-05-2004 11:07 » 

Пишу процедуру на вставку данных в таблицу. Несколько параметров имеют тип VARCHAR(20). При запуске процедуры пишет
overflow occurred during data type conversion
conversion error from syring "pr".

"pr"-это проверочная строка, которая явно меньше 20...
Откуда берется conversion? И вся ошибка целиком?
Записан

не умеете летать- не мучайте метлу!
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 11-05-2004 13:24 » 

Never, а можно увидеть метаданные, таблицы и SP?
Записан

С уважением, Oldy.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 11-05-2004 15:56 » 

Never, поскольку метеданные засекречены,   Отлично остается только предположить что у вашей базы DEFAULT CHARACTER SET = NONE или UNICODE_FSS.  Если мой склероз мне не изменяет, то и первый и второй случай обрабатывается как UNICODE_FSS, а значит длины VARCHAR нужно увеличить в 2-3 раза. Ну вот собственно и вся телепатия.  Угадал?   Улыбаюсь
Записан

С уважением, Oldy.
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #3 : 11-05-2004 16:28 » 

Oldy, пока не знаю, сейчас погляжу  Я шокирован!  Ага
Записан

не умеете летать- не мучайте метлу!
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #4 : 14-05-2004 15:14 » 

Поля таблицы. Кодировка у всего стоит win1251, кроме первых двух полей остальные могут быть пустыми.
KOD_DETALI – первичный ключ, not null
MAKER - первичный ключ, not null
NAME_DETALI
POSTAV
NALICHIE
ZENA_BEZ_SKIDKI
VALUT
PRIM_V_AVTO
RG_GRUPA
NOTE

CREATE PROCEDURE PRICE_ADD (
    prkod_detali varchar(30),
    prmaker varchar(20),
    prname_detali varchar(50),
    prpostav varchar(10),
    prnalichie integer,
    przena_bez_skidki float,
    prvalut varchar(4),
    prprim_v_avto varchar(20),
    prrg_grupa varchar(2),
    prnote varchar(50))
AS
BEGIN
  INSERT INTO PRICE (    kod_detali,    maker,    name_detali,    postav,    nalichie,    zena_bez_skidki,    valut,    prim_v_avto,    rg_grupa,    note)
  VALUES (    :prkod_detali,    :prmaker,    :prname_detali,    :prpostav,
    :prnalichie,    :przena_bez_skidki,    :prvalut,    :prprim_v_avto,
    :prrg_grupa,    :prnote);
END

Проверяю процедуру- запускаю на выполнение в списке параметров ввожу для ключевых полей строки “pr” и “pr”. В окне сообщений выходит то же сообщение, о котором я говорила выше.
Записан

не умеете летать- не мучайте метлу!
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 14-05-2004 19:10 » 

Never,  при следующих метаданных ошибки нет.  
Win98, FireBird WI-V1.5.0.4306 SS

Код:

CREATE TABLE PRICE )
KOD_DETALI VARCHAR)30: CONSTRAINT pk_kod NOT NULL PRIMARY KEY,
//первичный ключ может быть только один
//поле MAKER может быть уникальным но не PK, т.к. PK KOD_DETALI
MAKER VARCHAR)20: NOT NULL,
NAME_DETALI VARCHAR)50:,
POSTAV VARCHAR)10:,
NALICHIE INTEGER,
ZENA_BEZ_SKIDKI FLOAT,
VALUT VARCHAR)4:,
PRIM_V_AVTO VARCHAR)20:,
RG_GRUPA VARCHAR)2:,
NOTE VARCHAR)50:
:

CREATE PROCEDURE PRICE_ADD )
PRKOD_DETALI VARCHAR)30:,
PRMAKER VARCHAR)20:,
PRNAME_DETALI VARCHAR)50:,
PRPOSTAV VARCHAR)10:,
PRNALICHIE INTEGER,
PRZENA_BEZ_SKIDKI FLOAT,
PRVALUT VARCHAR)4:,
PRPRIM_V_AVTO VARCHAR)20:,
PRRG_GRUPA VARCHAR)2:,
PRNOTE VARCHAR)50::
AS
BEGIN
INSERT INTO PRICE ) kod_detali, maker, name_detali, postav, nalichie, zena_bez_skidki, valut, prim_v_avto, rg_grupa, note:
VALUES ) {prkod_detali, {prmaker, {prname_detali, {prpostav,
{prnalichie, {przena_bez_skidki, {prvalut, {prprim_v_avto,
{prrg_grupa, {prnote:
END


смотрите, что не так.
Записан

С уважением, Oldy.
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #6 : 15-05-2004 04:30 » 

Ачто- в FB не допускается составной первичный ключ?
Записан

не умеете летать- не мучайте метлу!
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 15-05-2004 04:46 » 

Never, вполне допустим, только метаданыые будут выглядеть немного по другому:
Цитата

CREATE TABLE PRICE (
KOD_DETALI VARCHAR(30) NOT NULL,
MAKER VARCHAR(20) NOT NULL,
NAME_DETALI VARCHAR(50),
POSTAV VARCHAR(10),
NALICHIE INTEGER,
ZENA_BEZ_SKIDKI FLOAT,
VALUT VARCHAR(4),
PRIM_V_AVTO VARCHAR(20),
RG_GRUPA VARCHAR(2),
NOTE VARCHAR(50),
CONSTRAINT pk_price PRIMARY KEY (KOD_DETALI, MAKER)
);
Записан

С уважением, Oldy.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 15-05-2004 05:02 » 

Never, и в этом случае ошибки "overflow occurred during data type conversion error from syring 'pr'." нет.
Записан

С уважением, Oldy.
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #9 : 15-05-2004 05:39 » 

Oldy, но таблица же уже создана, она есть. Я же в данній момент создаю процедуру на вставку данніх в уже готовую таблицу.
Записан

не умеете летать- не мучайте метлу!
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 15-05-2004 06:03 » 

Never,
Цитата
...таблица же уже создана...

метаданные похожи на те что у меня? (вы же мне их не показываете  Жаль )
А процедура: я скопировал ваши метаданные в буфер обмена, вставил их в SQL редактор в IBExpert, выполнил, закоммитил, перешел в раздел процедур, откомпилировал процедуру, выполнил. Во всплывшем окошке "Input Parameters" подставил значения в переменные :prkod_detali и :prmaker. Ok, commit. Ошибок нет. В таблице появились данные с моими значениями в полях kod_detali и maker.
Записан

С уважением, Oldy.
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #11 : 15-05-2004 07:28 » 

Хм. Сейчас не проверю- я на работе, а база дома.
Oldy, Я сейчас начну ругаться. Я думала-мы уже договорились про "вы" и "ты"... Или пока брудершафта не было- не считается? Отлично  Ага
Записан

не умеете летать- не мучайте метлу!
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 15-05-2004 15:48 » 

Never'чка,  ну не надо ругаться Отлично. От привычек (дурных или хороших), ну очень тяжело избавляться. Улыбаюсь
По поводу ошибки: ну никак мне не удается ее симмитировать. Уже в таблице
полЯ делал char(x), а в процедуре varchar(x) и наоборот, ну нифигашечки не получается воспроизвести эту ошибу. Так, что пока не получу реальных метаданных этой таблицы (включая команды создания индексов и всего,что к ней относится), и реальных метаданных SP - ни чего более подсказать не смогу.   Жаль
Записан

С уважением, Oldy.
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #13 : 15-05-2004 15:56 » new

Oldy, спасибо, сделаю
Записан

не умеете летать- не мучайте метлу!
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #14 : 16-05-2004 11:15 » 

Код:
SET NAMES WIN1251;

CREATE TABLE PRICE )
    KOD_DETALI       VARCHAR)90: NOT NULL,
    MAKER            VARCHAR)60: NOT NULL,
    NAME_DETALI      VARCHAR)50:,
    POSTAV           VARCHAR)10:,
    NALICHIE         INTEGER,
    ZENA_BEZ_SKIDKI  FLOAT,
    VALUT            VARCHAR)4:,
    PRIM_V_AVTO      VARCHAR)20:,
    RG_GRUPA         VARCHAR)2:,
    NOTE             VARCHAR)50:
:;

ALTER TABLE PRICE ADD CONSTRAINT PK_PRICE PRIMARY KEY )KOD_DETALI, MAKER:;

Это то, что есть по таблице если смотреть скрипт.
По твоим шагам делаю все точно так же: Перехожу в раздел процедур, компилирую, Commit, выполнение, ввод параметров в окне (заполняю два первых ключевых параметра строками «pr», без кавычек, остальное оставляю в null), нажимаю ОК- и тут получаю вышеупомянутую строку
Код:
Overflow occurred during data type conversion.
conversion error from string "pr".
conversion error from string "pr".

До второго commit дело не доходит вообще.
Записан

не умеете летать- не мучайте метлу!
Anonymous
Гость
« Ответ #15 : 16-05-2004 14:02 » 

Never, воспроизвести ошибку так и не удалось. Извращался как угодно:
делал поля в таблице и в процедуре разной размерности, делал поля в таблице и процедуре разного типа (char - varchar) и разной размерности - все проходит восхитительно, ошибок нет. Предлагаю сделать backup/restore базы, и поработать с восстановленной копией. Восстанавливай базу с новым именем (не замещая предыдущую). Посмотри логи которые будет выдавать backup/restore (лучше сохрани их в файлы). После backup/restorе, либо все станет как надо, либо будет найдено место приводящее к этой ошибке. Backup/restore можно делать через IBExpert - меню "Службы"->"Резервирование"|"Восстановление".
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 16-05-2004 14:06 » 

Гость не гость а Oldy Улыбаюсь
Записан

С уважением, Oldy.
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #17 : 17-05-2004 12:07 » 

После восстановления ругается:
Ubsuccessful execution caused by system error that does not preclude successful  execution of subsequent  statements.
requires both input and output file names.

Чего я там  не так сделала?
Ну с резервированием ошибок не было... Окно восстановление. Restore into- ставлю: new database. Database file-  выбираю путь, сохранить как- пишу имя новой базы. Так?
А в окне File name что-то  надо ставить?
В параметрах General отмечено только commit после каждой таблицы...
output- в файл.
Записан

не умеете летать- не мучайте метлу!
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 17-05-2004 12:54 » 

Цитата
А в окне File name что-то надо ставить?

Путь\Имя backup файла (*.gbk | *.fbk) из которого надо восстановить базу.
Записан

С уважением, Oldy.
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #19 : 17-05-2004 15:35 » 

ставила. Пришет то же самое
Цитата

requires both input and output file names.
Записан

не умеете летать- не мучайте метлу!
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 17-05-2004 20:04 » 

Я шокирован! О ужас! Какая-то безисходность.  "Требуется оба имени входного и выходного файлов". И это при указанных Database file  и File Name? Получается, что IBExpert "криво" работает? Или мы все-таки говорим о разных моментах?
Записан

С уважением, Oldy.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines