Never
|
|
« : 11-05-2004 11:07 » |
|
Пишу процедуру на вставку данных в таблицу. Несколько параметров имеют тип VARCHAR(20). При запуске процедуры пишет overflow occurred during data type conversion conversion error from syring "pr".
"pr"-это проверочная строка, которая явно меньше 20... Откуда берется conversion? И вся ошибка целиком?
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Oldy
|
|
« Ответ #1 : 11-05-2004 13:24 » |
|
Never, а можно увидеть метаданные, таблицы и SP?
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Oldy
|
|
« Ответ #2 : 11-05-2004 15:56 » |
|
Never, поскольку метеданные засекречены, остается только предположить что у вашей базы DEFAULT CHARACTER SET = NONE или UNICODE_FSS. Если мой склероз мне не изменяет, то и первый и второй случай обрабатывается как UNICODE_FSS, а значит длины VARCHAR нужно увеличить в 2-3 раза. Ну вот собственно и вся телепатия. Угадал?
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Never
|
|
« Ответ #3 : 11-05-2004 16:28 » |
|
Oldy, пока не знаю, сейчас погляжу
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Never
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #6 : 15-05-2004 04:30 » |
|
Ачто- в FB не допускается составной первичный ключ?
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Oldy
|
|
« Ответ #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
|
|
« Ответ #8 : 15-05-2004 05:02 » |
|
Never, и в этом случае ошибки "overflow occurred during data type conversion error from syring 'pr'." нет.
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Never
|
|
« Ответ #9 : 15-05-2004 05:39 » |
|
Oldy, но таблица же уже создана, она есть. Я же в данній момент создаю процедуру на вставку данніх в уже готовую таблицу.
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Oldy
|
|
« Ответ #10 : 15-05-2004 06:03 » |
|
Never, ...таблица же уже создана... метаданные похожи на те что у меня? (вы же мне их не показываете ) А процедура: я скопировал ваши метаданные в буфер обмена, вставил их в SQL редактор в IBExpert, выполнил, закоммитил, перешел в раздел процедур, откомпилировал процедуру, выполнил. Во всплывшем окошке "Input Parameters" подставил значения в переменные :prkod_detali и :prmaker. Ok, commit. Ошибок нет. В таблице появились данные с моими значениями в полях kod_detali и maker.
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Never
|
|
« Ответ #11 : 15-05-2004 07:28 » |
|
Хм. Сейчас не проверю- я на работе, а база дома. Oldy, Я сейчас начну ругаться. Я думала-мы уже договорились про "вы" и "ты"... Или пока брудершафта не было- не считается?
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Oldy
|
|
« Ответ #12 : 15-05-2004 15:48 » |
|
Never'чка, ну не надо ругаться . От привычек (дурных или хороших), ну очень тяжело избавляться. По поводу ошибки: ну никак мне не удается ее симмитировать. Уже в таблице полЯ делал char(x), а в процедуре varchar(x) и наоборот, ну нифигашечки не получается воспроизвести эту ошибу. Так, что пока не получу реальных метаданных этой таблицы (включая команды создания индексов и всего,что к ней относится), и реальных метаданных SP - ни чего более подсказать не смогу.
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Never
|
|
« Ответ #13 : 15-05-2004 15:56 » |
|
Oldy, спасибо, сделаю
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Never
|
|
« Ответ #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
|
|
« Ответ #16 : 16-05-2004 14:06 » |
|
Гость не гость а Oldy
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Never
|
|
« Ответ #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
|
|
« Ответ #18 : 17-05-2004 12:54 » |
|
А в окне File name что-то надо ставить?
Путь\Имя backup файла (*.gbk | *.fbk) из которого надо восстановить базу.
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Never
|
|
« Ответ #19 : 17-05-2004 15:35 » |
|
ставила. Пришет то же самое requires both input and output file names.
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Oldy
|
|
« Ответ #20 : 17-05-2004 20:04 » |
|
О ужас! Какая-то безисходность. "Требуется оба имени входного и выходного файлов". И это при указанных Database file и File Name? Получается, что IBExpert "криво" работает? Или мы все-таки говорим о разных моментах?
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
|