powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / параметры курсора
7 сообщений из 7, страница 1 из 1
параметры курсора
    #32597388
blackmac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть цикл выборки данных из курсора
есть ли возможность понять что ото последняя запись, либо
заранее знать число записей (без count() ) ?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
l_stm = 'CREATE TABLE ' || table_name || ' ( ';


  FOR SELECT column_name, data_type
      FROM all_tab_columns
      WHERE table_name = 'T3'
      INTO :l_field_name, :l_data_type
  DO BEGIN
    l_stm = l_stm || :l_field_name || ' ' || :l_data_type || ' ';

    SUSPEND;
  END
l_stm = l_stm || ' )' ;
...
Рейтинг: 0 / 0
параметры курсора
    #32597397
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После того, как у тебя цикл FOR SELECT ... DO BEGIN ... END пробежал,
имей уверенность, что это была последняя запись селекта.
...
Рейтинг: 0 / 0
параметры курсора
    #32597428
blackmac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пытаюсь сделать rename table как в Oracle ;-)
может такое уже есть, буду рад если ткнете носом :-)
собираю строку из описания полей для создания новой таблицы
в общем я хочу на последнем фетчировании не конкатенировать к строке запятую

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
  
  DECLARE VARIABLE l_old_table_name VARCHAR( 60 );
  DECLARE VARIABLE l_new_table_name VARCHAR( 60 );
  DECLARE VARIABLE l_field_name VARCHAR( 50 );
  DECLARE VARIABLE l_data_type  VARCHAR( 50 );

BEGIN

  l_old_table_name = 'T2';
  l_new_table_name  = 'T3';

  l_stm = 'CREATE TABLE ' || l_new_table_name || ' ( ';

  FOR SELECT column_name, data_type
      FROM all_tab_columns
      WHERE table_name = :l_old_table_name
      INTO :l_field_name, :l_data_type
  DO BEGIN
  /* вот здесь !!! */ 
    l_stm = l_stm || :l_field_name || ' ' || :l_data_type || ', ' ;
  END
  l_stm = l_stm || ' )' ;
  EXECUTE STATEMENT l_stm;

END
...
Рейтинг: 0 / 0
параметры курсора
    #32597452
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
DO BEGIN
   IF (l_stm <> '') THEN l_stm = l_stm || ',';
   l_stm = l_stm || :l_field_name || ' ' || :l_data_type;
   END
...
Рейтинг: 0 / 0
параметры курсора
    #32597463
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поторопился. Немного логику работы нужно поменять.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
BEGIN
  l_old_table_name = 'T2';
  l_new_table_name  = 'T3';
  l_stm = '';

  FOR SELECT column_name, data_type
      FROM all_tab_columns
      WHERE table_name = :l_old_table_name
      INTO :l_field_name, :l_data_type
  DO BEGIN
     IF (l_stm <> '') THEN l_stm = l_stm || ',';
     l_stm = l_stm || :l_field_name || ' ' || :l_data_type;
     END

  l_stm = 'CREATE TABLE ' || l_new_table_name || ' ( ' || l_stm || ' )' ;
  EXECUTE STATEMENT l_stm;
END

Но учти, что типы полей ты так не выковыряешь.
...
Рейтинг: 0 / 0
параметры курсора
    #32597519
blackmac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o, пасибки, не допер :-)

а почему типы не выковыряю ?
я стараюсь работать с простыми скалярными типами а не с доменами

сделал такую вот такую view (а ля oracle)
из нее и тащу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 /* View: ALL_TAB_COLUMNS */ 
CREATE VIEW ALL_TAB_COLUMNS(
    OWNER,
    TABLE_NAME,
    COLUMN_NAME,
    DATA_TYPE,
    DATA_LENGTH,
    DATA_SCALE)
AS
SELECT r.rdb$owner_name, 
       r.rdb$relation_name, 
       rf.rdb$field_name,
       t.rdb$type_name, 
       f.rdb$field_length, 
       f.rdb$field_scale 
FROM rdb$relations r, 
     rdb$relation_fields rf,
     rdb$fields f, 
     rdb$types t
WHERE r.rdb$relation_name = rf.rdb$relation_name AND
      rf.rdb$field_source = f.rdb$field_name AND
      f.rdb$field_type = t.rdb$type AND 
      t.rdb$field_name = 'RDB$FIELD_TYPE';
...
Рейтинг: 0 / 0
параметры курсора
    #32597537
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blackmacа почему типы не выковыряю ?
я стараюсь работать с простыми скалярными типами а не с доменами

Потому, что названия типов, которые ты получишь из поля RDB$TYPE_NAME таблички RDB$TYPES не идентичны тому, что нужно задавать в DDL-приказе на создание таблицы. Нужна ещё доп.обработка этой информации для приведения типов в соответствие.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / параметры курсора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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