Странно, но не могу сделать UPDATE
МУЛЛ
Дата: 07.11.2005 10:25:39
Пытаюсь выполнять команду:
UPDATE PAYMENTS SET
CUST_ID = 18870,
PAYDATE = '2004-11-03',
SUMM = 11111,
CONT_ID = NULL,
SERV_ITEM = NULL,
COMMENT = 'trulala',
CREATED_BY = 251,
UPDATED_BY = NULL,
PAY_NUM = '123',
PAY_TYPE = 1
WHERE (PAY_ID = 19959);
выдает ошибку:
Overflow occurred during data type conversion.
conversion error from string "BLOB".
Причем, если в COMMENT = 'trulala' вставить русские буквы ошибка вылизает другая.
Помогите, пожалуйста.
Карабас Барабас
Дата: 07.11.2005 10:28:27
1. Сервер
2. Клиент: видимо дельфи ? какие компоненты доступа ?
3. ДДЛ таблиц
Posted via ActualForum NNTP Server 1.3
МУЛЛ
Дата: 07.11.2005 10:57:38
сервер - 7.0
пытаюсь это сделать IB Expert
CREATE TABLE PAYMENTS (
PAY_ID INTEGER NOT NULL,
CUST_ID INTEGER,
PAYDATE DATE,
SUMM DOUBLE PRECISION,
XML BLOB SUB_TYPE 1 SEGMENT SIZE 80,
CONT_ID INTEGER,
SERV_ITEM INTEGER,
COMMENT VARCHAR(250),
CREATED_BY INTEGER NOT NULL,
UPDATED_BY INTEGER,
PAY_NUM VARCHAR(20),
PAY_TYPE INTEGER default 0
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE PAYMENTS ADD PRIMARY KEY (PAY_ID);
/******************************************************************************/
/*** Foreign Keys ***/
/******************************************************************************/
ALTER TABLE PAYMENTS ADD CONSTRAINT FK_PAYMENTS_CUST FOREIGN KEY (CUST_ID) REFERENCES CUSTOMERS (CUST_ID);
/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/
/* Trigger: PAYMENTS_AD0 */
CREATE TRIGGER PAYMENTS_AD0 FOR PAYMENTS
ACTIVE AFTER DELETE POSITION 0
AS
begin
update customers set balance=balance-old.summ where cust_id=old.cust_id;
end
^
/* Trigger: PAYMENTS_AI0 */
CREATE TRIGGER PAYMENTS_AI0 FOR PAYMENTS
ACTIVE AFTER INSERT POSITION 0
AS BEGIN UPDATE CUSTOMERS SET BALANCE = BALANCE + NEW.SUMM WHERE CUST_ID = NEW.CUST_ID ; INSERT INTO AUDIT ( USER_ID , CLASS_ID , OBJECT_ID , TABLE_NAME , OPERATION ) VALUES ( NEW.CREATED_BY , 209 , NEW.PAY_ID , 'PAYMENTS' , 1 ) ; END
^
/* Trigger: PAYMENTS_AU0 */
CREATE TRIGGER PAYMENTS_AU0 FOR PAYMENTS
ACTIVE AFTER UPDATE POSITION 0
AS BEGIN UPDATE CUSTOMERS SET BALANCE = BALANCE + NEW.SUMM -OLD.SUMM WHERE CUST_ID = NEW.CUST_ID ; INSERT INTO AUDIT ( USER_ID , CLASS_ID , OBJECT_ID , TABLE_NAME , OPERATION ) VALUES ( NEW.UPDATED_BY , 209 , NEW.PAY_ID , 'PAYMENTS' , 2 ) ; END
^
SET TERM ; ^
/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
/* Privileges of users */
GRANT ALL ON PAYMENTS TO "USER";
Карабас Барабас
Дата: 07.11.2005 11:08:07
Нету ответа на 2-й вопрос. Как пытаешься энтот апдэйт делать-то ?
МУЛЛ
Дата: 07.11.2005 11:21:10
В IB Expert открываю SQL Editor и ввожу команду из первого сообщения.
Карабас Барабас
Дата: 07.11.2005 11:34:21
ты еще кастомерс не привел
МУЛЛ
Дата: 07.11.2005 11:40:49
CREATE TABLE CUSTOMERS (
CUST_ID INTEGER NOT NULL,
NAME VARCHAR(200),
CUST_ROLE INTEGER NOT NULL,
BALANCE DOUBLE PRECISION,
ISACTIVE INTEGER DEFAULT 0 NOT NULL,
CREATED DATE DEFAULT 'now',
CREATED_BY INTEGER NOT NULL,
UPDATED_BY INTEGER,
XML BLOB SUB_TYPE 1 SEGMENT SIZE 80,
LOGIN VARCHAR(20),
PASSWD VARCHAR(20),
RESOURCE VARCHAR(50),
PARENT_ID INTEGER,
CHILDS INTEGER DEFAULT 0 NOT NULL,
PLAN_ID INTEGER,
CURR_ID INTEGER default 840 NOT NULL,
CURR_COEFF DOUBLE PRECISION default 1 NOT NULL,
UPDATED TIMESTAMP
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE CUSTOMERS ADD PRIMARY KEY (CUST_ID);
/******************************************************************************/
/*** Indices ***/
/******************************************************************************/
CREATE INDEX CUSTOMERS_IDX1 ON CUSTOMERS (PARENT_ID);
CREATE INDEX CUSTOMERS_NAME ON CUSTOMERS (NAME);
CREATE INDEX CUST_NAME_UPPER ON CUSTOMERS COMPUTED BY (UPPER(name collate PXW_CYRL));
/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/
/* Trigger: CUSTOMERS_AD0 */
CREATE TRIGGER CUSTOMERS_AD0 FOR CUSTOMERS
ACTIVE AFTER DELETE POSITION 0
AS
begin
/* update parent */
if (not (old.parent_id is null)) then
update customers set childs=childs where cust_id=old.parent_id;
if (old.updated_by is not null) then insert into audit (user_id,class_id,object_id,table_name,operation)
values (old.updated_by, 203, old.cust_id, 'CUSTOMERS',3);
end
^
/* Trigger: CUSTOMERS_AI0 */
CREATE TRIGGER CUSTOMERS_AI0 FOR CUSTOMERS
ACTIVE AFTER INSERT POSITION 0
AS
begin
/* audit */
insert into audit (user_id,class_id,object_id,table_name,operation)
values (new.created_by, 203, new.cust_id, 'CUSTOMERS',1);
/* update parent */
if (not (new.parent_id is null)) then
update customers set childs=childs where cust_id=new.parent_id;
end
^
/* Trigger: CUSTOMERS_AU0 */
CREATE TRIGGER CUSTOMERS_AU0 FOR CUSTOMERS
ACTIVE AFTER UPDATE POSITION 0
AS
begin
if (new.updated_by is not null) then insert into audit (user_id,class_id,object_id,table_name,operation)
values (new.updated_by, 203, new.cust_id, 'CUSTOMERS',2);
end
^
/* Trigger: CUSTOMERS_BD0 */
CREATE TRIGGER CUSTOMERS_BD0 FOR CUSTOMERS
ACTIVE BEFORE DELETE POSITION 0
AS
begin
/* update childs */
update customers set parent_id=old.parent_id where parent_id=old.cust_id;
end
^
/* Trigger: CUSTOMERS_BI0 */
CREATE TRIGGER CUSTOMERS_BI0 FOR CUSTOMERS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
new.balance=0;
end
^
/* Trigger: CUSTOMERS_BU0 */
CREATE TRIGGER CUSTOMERS_BU0 FOR CUSTOMERS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
select count(*) from customers where parent_id=new.cust_id into new.childs;
new.updated=current_timestamp;
end
^
SET TERM ; ^
/******************************************************************************/
/*** Descriptions ***/
/******************************************************************************/
DESCRIBE TABLE CUSTOMERS
'Абоненты';
/* Fields descriptions */
DESCRIBE FIELD NAME TABLE CUSTOMERS
'Краткое имя абонента';
DESCRIBE FIELD CUST_ROLE TABLE CUSTOMERS
'Роль';
DESCRIBE FIELD BALANCE TABLE CUSTOMERS
'Текущий баланс абонента';
DESCRIBE FIELD ISACTIVE TABLE CUSTOMERS
'Признак активности (0=блокированный)';
DESCRIBE FIELD XML TABLE CUSTOMERS
'Описание (в XML)';
DESCRIBE FIELD LOGIN TABLE CUSTOMERS
'Логин в систему';
DESCRIBE FIELD PASSWD TABLE CUSTOMERS
'Пароль в систему';
/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
/* Privileges of users */
GRANT ALL ON CUSTOMERS TO "USER";
Карабас Барабас
Дата: 07.11.2005 12:04:05
блин, у тебя там куча связей, вот audit еще вылез :)
МУЛЛ |
Overflow occurred during data type conversion. conversion error from string "BLOB". |
слово BLOB обычно выводится в дельфийных гридах в колонках BLOB-полей, наверное ты какими-то косвенными путями пытаешься записать строку в блоб
МУЛЛ |
Причем, если в COMMENT = 'trulala' вставить русские буквы ошибка вылизает другая. |
какая ? или секрет ?
чует мой ТЛ, что тут с кодировками что-то не то
МУЛЛ
Дата: 07.11.2005 12:23:40
таблица AUDIT еще в описании тригеров для PAYMENTS было.
Я не могу это все охватить. Пытался переписывать тригеры, но ничего не помогло. Причем, вхожу под sysdba, следовательно все прарва есть.
Понимаю, что голову ломать просто так ты не хочешь. Напиши на lfoot@yandex.ru свои условия.
Задача выглядит крайне просто: в таблицу PAYMENTS нужно вставлять норвые записи.
Карабас Барабас
Дата: 07.11.2005 12:41:19
МУЛЛ |
таблица AUDIT еще в описании тригеров для PAYMENTS было |
DDL не было
МУЛЛ |
Пытался переписывать тригеры, но ничего не помогло |
а убрать их вовсе ? надо ж локализовать проблему
МУЛЛ |
Причем, вхожу под sysdba, следовательно все прарва есть |
это тут ни при чем, думаю я
МУЛЛ |
Задача выглядит крайне просто: в таблицу PAYMENTS нужно вставлять норвые записи |
ты ж апдэйт делать пытаешься
Posted via ActualForum NNTP Server 1.3