powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Копирование записей.
15 сообщений из 15, страница 1 из 1
Копирование записей.
    #39244619
Фотография drodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня и хорошей пятницы уважаемые гуру "ЖарПтицеводы" ))

Подобной темы не нашел, поэтому постараюсь правильно описасть суть решения которое хотелось бы получить.

Есть таблица с 50 полями но в дальнейчем число полей будет меняться, в ней присутствуют PI и FK ключами.
Хочу сделать копиию одной из записи данной таблицы но при изменить всего лишь 3 поля. И самое сложное сделать это с динамически изменющимся количеством полей. Никто не сталкивался с подобной задачей в ХП или триггерах, если сталкивались то прошу поделиться опытом.

Таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE TBL1 (
    ID                INTEGER NOT NULL,
    FIELD1         VARCHAR(15) CHARACTER SET WIN1251,
    FIELD2         VARCHAR(10) CHARACTER SET WIN1251,
    FIELD3         VARCHAR(15) CHARACTER SET WIN1251,
    FIELD4         INTEGER,
    FIELD5         DATE,
    FIELD6         DOUBLE PRECISION,
    ...
    FIELD50        DOUBLE PRECISION,
);
...
Рейтинг: 0 / 0
Копирование записей.
    #39244645
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Drodman!
You wrote on 27 мая 2016 г. 10:47:58:

Drodman> самое сложное сделать это с динамически изменющимся количеством полей
ну так и формируй запрос динамически.
если внутри процедуры, или триггера, то выполняй его через EXECUTE STATEMENT
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Копирование записей.
    #39244655
Фотография drodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я прошу прощения просто не совсем доконца понимаю. Если не сложно подправьте в случае надобности.
т.е. мне нужно сделать примерно такую процедуру:
Код: plsql
1.
2.
insert into tbl1 values 
select (gen_id(idgen, 1), execute statement (ЗАПРОС ВЫДАЮЩИЙ СПИСОК ПОЛЕЙ ТАБЛИЦЫ (всех, кроме ID) )
...
Рейтинг: 0 / 0
Копирование записей.
    #39244663
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drodman,

нет конечно. EXECUTE STATEMENT это отдельный оператор, его нельзя включать в DML инструкции.
...
Рейтинг: 0 / 0
Копирование записей.
    #39244664
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет уж.
дальше сам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Копирование записей.
    #39244667
Фотография drodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо. Очень помогли.
...
Рейтинг: 0 / 0
Копирование записей.
    #39244692
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drodman, в общих чертах это делается так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
EXECUTE BLOCK
AS
  DECLARE VARIABLE sql VARCHAR(32765) DEFAULT 'INSERT INTO TBL1 (ID, ';
  DECLARE VARIABLE cnt SMALLINT DEFAULT 1;
BEGIN
  WHILE (cnt < 10) DO
    BEGIN
      sql = sql || 'FIELD' || cnt || ', ';
      cnt = cnt + 1;
    END
  sql = sql || 'FIELD' || cnt || ') VALUES (';
  cnt = 1;
  WHILE (cnt < 10) DO
    BEGIN
      -- здесь соединением строк пихаем значения полей
      .
      .
      .

  sql = sql || ')'
  EXECUTE STATEMENT sql;
END
...
Рейтинг: 0 / 0
Копирование записей.
    #39244725
Фотография drodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev, Огромное спасибо!
...
Рейтинг: 0 / 0
Копирование записей.
    #39244736
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drodmanЕсть таблица с 50 полями но в дальнейчем число полей будет меняться.
Хочу сделать копиию одной из записи данной таблицы но при изменить всего лишь 3 поля. И
самое сложное сделать это с динамически изменющимся количеством полей.
И что в этом сложного? Тот, кто меняет количество полей, пусть меняет и процедуру копирования.

PS: Предлагать нанять архитектора БД чтобы спроектировал нормальную базу вместо этого
....... - не буду.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Копирование записей.
    #39244741
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drodman FIELD1 VARCHAR(15) CHARACTER SET WIN1251,
комментарий в сторону. Обычно при экспорте ddl из какой-нибудь тулзы (isql, ibexpert), набор символов для строковых столбцов выводится только в том случае, если он отличается от дефолтного для БД. Следовательно, у вас в rdb$database.rdb$character_set_name может быть пусто, и при случайном коннекте без win1251 и создании таблиц или добавлении столбцов строковые столбцы создадутся в этом самом чарсете, т.е. none (или не win1251).

Рекомендую проверить эту ситуацию, и исправить.
...
Рейтинг: 0 / 0
Копирование записей.
    #39245060
Фотография drodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, спасибо, да дейстивтельно база лежит на сервере unix с кодировкой UTF-8, поэтому приходится в "тулзах" прописывать кодировку.
...
Рейтинг: 0 / 0
Копирование записей.
    #39245063
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drodmanбаза лежит на сервере unix с кодировкой UTF-8, поэтому приходится в "тулзах"
прописывать кодировку.
"Аффтар жжот!" (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Копирование записей.
    #39245191
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drodmanбаза лежит на сервере unix с кодировкой UTF-8, поэтому приходится
CHARACTER SET WIN1251Отгоните от сервера диверсанта, пока он все не переломал.

ТАК делать не надо. Если твоя клиентская часть в силу своей древности не понимает юникод, то укажи в строке коннекта, что ты хочешь получать вин1251, сервер тебе перекодирует, когда будет отдавать твоему клиенту данные. Делать пол базы в юникоде, половину в вин1251 в буквальном смысле "выстрел себе в ногу".
...
Рейтинг: 0 / 0
Копирование записей.
    #39245196
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyДелать пол базы в юникоде, половину в вин1251 в буквальном смысле
"выстрел себе в ногу".
Да в общем-то пофиг, пока в DPB есть вменяемое значение isc_dpb_lc_ctype...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Копирование записей.
    #39245207
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДа в общем-то пофигПока немчура с умляутами или китайцы с иероглифами не подтянутся.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Копирование записей.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]