Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Работа с VARCHAR в ХП


Автор: VladBD 14.3.2007, 13:22
Есть таблица
Код

CREATE TABLE TBL_SORT (
    ID      INTEGER NOT NULL,
    FIELD1  VARCHAR(250),
    FIELD2  VARCHAR(250));

Есть хранимая процедура - вот кусок...
Код

...
declare variable S VARCHAR(250);
...
FOR SELECT ID_LINK FROM tbl1 WHERE (ID_ACTION=:pid_action) into :PID_LINK
    DO
    BEGIN
      S='|';
      FOR SELECT ID_LOT FROM tbl2 WHERE (ID_LINK=:PID_LINK) into :PID_LOT
      DO
      BEGIN
        S=S||CAST(:PID_LOT as varchar(250))||'|';
      END
      //S=S||'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789';
      //S=S||'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789';
      INSERT INTO TBL_SORT (ID, FIELD1) VALUES (:PID_LINK,:S);
    END


Проблема в переменной S. Если она не превышает 250 то все нормально, если раскоментарить код (специально увеличивает >250) - то возникает ошибка...в принципе все правильно - только тогда у меня такие вопросы...
1 - Есть ли функция проверки длины S, т.к. в таблицу для хранения и индексирования все равно нужно 250.
2 - Можно ли указать varchar(32000) (по максимуму - думаю такую строку не сгенерю), а при вставке записи указать CAST(:S as Varchar(250))
3 - Если S varchar(1000) - при вставке будет ли сервер сам отрубать до 250 символов.

Автор: mspuz 15.3.2007, 10:38
Есть ф-ция SUBSTRING(значение FROM начальная позиция FOR длина)

Добавлено @ 10:52 
Для того, чтобы узнать длину строки - octet_length(значение).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)