Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменение длины поля 
V
    Опции темы
ksili
Дата 24.1.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Каким запросом можно изменить длину строкового поля в таблице (FireBird 2.0)?

когда делаю это в IBExpert'е, он генерирует такой запрос:
Код

update RDB$FIELDS set
RDB$FIELD_LENGTH = 20,
RDB$CHARACTER_LENGTH = 20
where RDB$FIELD_NAME = 'RDB$105'

то есть никакой информации ни о имени таблицы, ни о имени изменяемого поля. Ненаглядно как-то, да и ненадёжно, скрипт я делаю в одном месте, а применяться он будет в другом. Нет гарантии, что там это поле будет 'RDB$105'. Как можно это же самое сделать по-другому? Прошу не предлагать пересоздавать таблицу.

Если кто знает покажите на таком примере:
есть таблица T_USERS, в ней поле 
PHONE          CHAR(11)
надо заменить на поле
PHONE          CHAR(20)

В книге Х.Борри ничего такого не нашёл


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 24.1.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



почитай про alter table

ещё вариант - создай новый домен и назначт его полю


делают еще так:
1. создают новый столбец
2. переносят в него данные
3. удаляют старый столбец
4. переименовывают новый столбец

Добавлено через 3 минуты и 18 секунд
Вот ещё вариант
Код

ALTER TABLE xxx ALTER xxxn varchar(100)


Добавлено через 4 минуты и 9 секунд
 smile 
Код

ALTER TABLE table <operation> [, <operation> …];
<operation> = {ADD <col_def>
| ADD <tconstraint>
| ALTER [COLUMN] column_name <alt_col_clause>
| DROP col
| DROP CONSTRAINT constraint}
<alt_col_clause> = {TO new_col_name
| TYPE new_col_datatype
| POSITION new_col_position}
<col_def> = col {< datatype> | COMPUTED [BY] (< expr>) | domain}
[DEFAULT { literal | NULL | USER}]
[NOT NULL]
[ <col_constraint>]
[COLLATE collation]
< datatype> =
{SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION}[ <array_dim>]
| (DATE | TIME | TIMESTAMP}[ <array_dim>]
| {DECIMAL | NUMERIC} [( precision [, scale])] [ <array_dim>]
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [( int)]
[ <array_dim>] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}
[VARYING] [( int)] [ <array_dim>]
| BLOB [SUB_TYPE { int | subtype_name}] [SEGMENT SIZE int]
[CHARACTER SET charname]
| BLOB [( seglen [, subtype])] <array_dim> = [[x:]y [, [x:]y …]]
< expr> = A valid SQL expression that results in a single value.
<col_constraint> = [CONSTRAINT constraint]
{ UNIQUE
| PRIMARY KEY
| REFERENCES other_table [( other_col [, other_col …])]
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
| CHECK ( <search_condition>)}
<tconstraint> = [CONSTRAINT constraint]
{{PRIMARY KEY | UNIQUE} ( col [, col …])
| FOREIGN KEY ( col [, col …]) REFERENCES other_table
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
| CHECK ( <search_condition>)}
CHAPTER 2 SQL STATEMENT AND FUNCTION REFERENCE
<search_condition> = <val> <operator> { <val> | ( <select_one>)}
| <val> [NOT] BETWEEN <val> AND <val>
| <val> [NOT] LIKE <val> [ESCAPE <val>]
| <val> [NOT] IN ( <val> [ , <val> …] | <select_list>)
| <val> IS [NOT] NULL
| <val> {>= | <=}
| <val> [NOT] {= | < | >}
| {ALL | SOME | ANY} ( <select_list>)
| EXISTS ( <select_expr>)
| SINGULAR ( <select_expr>)
| <val> [NOT] CONTAINING <val>
| <val> [NOT] STARTING [WITH] <val>
| ( <search_condition>)
| NOT <search_condition>
| <search_condition> OR <search_condition>
| <search_condition> AND <search_condition>
<val> = { col [ <array_dim>] | : variable
| <constant> | <expr> | <function>
| udf ([ <val> [, <val> …]])
| NULL | USER | RDB$DB_KEY | ? }
[COLLATE collation]
<constant> = num | ' string' | charsetname ' string'
<function> = COUNT (* | [ALL] <val> | DISTINCT <val>)
| SUM ([ALL] <val> | DISTINCT <val>)
| AVG ([ALL] <val> | DISTINCT <val>)
| MAX ([ALL] <val> | DISTINCT <val>)
| MIN ([ALL] <val> | DISTINCT <val>)
| CAST ( <val> AS <datatype>)
| UPPER ( <val>)
| GEN_ID ( generator, <val>)
<operator> = {= | < | > | <= | >= | !< | !> | <> | !=}
<select_one> = SELECT on a single column; returns exactly one value.
<select_list> = SELECT on a single column; returns zero or more values.
<select_expr> = SELECT on a list of values; returns zero or more
values.


Добавлено через 5 минут
http://alexpanf.nm.ru/books/ibsql/  smile 

Это сообщение отредактировал(а) Akella - 24.1.2008, 13:39
PM MAIL   Вверх
ksili
Дата 25.1.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Akella, спасибо! Только в примере слово type пропустил. Вот так сработало:
Код

alter table T_USERS alter column PHONE type char(20)

Вот только назад с 20 символов на 11 длину таким запросом изменить не получилось. Сказал, что минимальная длина, которую можно указать - 20 символов. А вот тем запросом, к-рый мне изначально не нравился, получилось))
Код

update RDB$FIELDS set
RDB$FIELD_LENGTH = 11,
RDB$CHARACTER_LENGTH = 11
where RDB$FIELD_NAME = 'RDB$105'

Интересно, почему?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 25.1.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(ksili @  25.1.2008,  08:42 Найти цитируемый пост)
Вот только назад с 20 символов на 11 длину таким запросом изменить не получилось

это известное ограничение у FB, строковые поля можно изменять ТОЛЬКО в сторону увеличения, кстати я не знаю, может уже и сняли в новых версиях.

Добавлено через 34 секунды
Цитата(ksili @  25.1.2008,  08:42 Найти цитируемый пост)
. А вот тем запросом, к-рый мне изначально не нравился, получилось))

это ты изменил домен  smile 
PM MAIL   Вверх
ksili
Дата 25.1.2008, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(Akella @  25.1.2008,  13:23 Найти цитируемый пост)
это ты изменил домен

Ну так получается, это способ обойти вышеупомянутое ограничение FB  smile 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
igor_123
Дата 29.1.2008, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.12.2007
Где: Днепропетровск

Репутация: нет
Всего: нет



нет не сняли, да и незачем его снимать, сделал столбец с меньшей длиной перелил туда данные, удалил старый, переименовал новый
PM MAIL   Вверх
Akella
Дата 29.1.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



igor_123, читал? 
Цитата(Akella @  24.1.2008,  13:36 Найти цитируемый пост)
делают еще так:
1. создают новый столбец
2. переносят в него данные
3. удаляют старый столбец
4. переименовывают новый столбец

 smile 
PM MAIL   Вверх
igor_123
Дата 30.1.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.12.2007
Где: Днепропетровск

Репутация: нет
Всего: нет



 smile 
читал, но увидел только сейчас 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.1134 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.