powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / rdb$db_key и его содержимое
23 сообщений из 23, страница 1 из 1
rdb$db_key и его содержимое
    #38920301
Евгений Болтик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотря на rdb$db_key я заметил, что нет пропусков в HEX коде. Полез читать и в одной из тем DY сказал, что rdb$db_key это порядковый номер записи. Я сразу захотел этим воспользоваться и обломился на первом же запросе. Попытался сделать так:

Код: sql
1.
2.
select cast(rdb$db_key as varchar(18)), rdb$db_key
from RDB$FIELDS


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

Как получить содержимое в селекте, а не на стороне клиента? Если кто знает то подскажите.

Простая цель получить допустим это каждая (втора, третья и т.д. строка). Я понимаю, что можно генератор прикрутить (но при глобально применение генераторов должно быть куча это неприемлемо), но уже есть встроенное решение и им можно было бы воспользоваться.
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920320
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Болтик,

забудь про dbkey, он не такой и не для того. Забудь.
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920324
Евгений Болтик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladЕвгений Болтик,

забудь про dbkey, он не такой и не для того. Забудь.

Это знаю. что он для другого. Просто хотел впервые воспользоваться :), хотя и не для того для чего он сделан.
А в тройке случаем не появится возможность порядковый номер сформировать без всяких генераторов (командное слова или еще что)?
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920332
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений БолтикА в тройке случаем не появится возможность порядковый номер сформировать без всяких генераторов (командное слова или еще что)?Читай про оконные ф-ции и про RANK
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920348
Евгений Болтик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladЕвгений БолтикА в тройке случаем не появится возможность порядковый номер сформировать без всяких генераторов (командное слова или еще что)?Читай про оконные ф-ции и про RANK

я правильно понимаю
Код: sql
1.
RANK() OVER(ORDER BY PK) num


PK это уникальный для вычисления значений функции, я так понимаю.

это и будет номер каждой строки? или я плохо прочитал и не въехал?
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920366
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений БолтикА в тройке случаем не появится возможность порядковый номер сформировать
rdb$db_key - это не "порядковый номер", а физический номер записи конкретной таблицы.
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920432
Евгений Болтик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvЕвгений БолтикА в тройке случаем не появится возможность порядковый номер сформировать
rdb$db_key - это не "порядковый номер", а физический номер записи конкретной таблицы.

Я всегда так и считал. Но сам себя ввел в заблуждение, прочитав 1592059 "DB_KEY - это номер записи, а не версии" и по своему поняв. Попробовал у меня четко без пропусков были коды, я и подумал, что Дима сказа про возвращенный номер записи. Не успел сортировку прикрутить т.к. на первых же тестах не удалось преобразовать к VARCHAR. Прикрутил сортировку и получил то, о чем знал раньше.

Остался только вопрос почему нельзя DB_KEY показать как VARCHAR?
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920440
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений БолтикОстался только вопрос почему нельзя DB_KEY показать как VARCHAR?

Потому что он CHAR CHARACTER SET OCTETS и мой тикет об автоматическом преобразовании в HEX
при касте в любую другую кодировку отвергли.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920479
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений БолтикОстался только вопрос почему нельзя DB_KEY показать как VARCHAR?

Используй нормальный "показыватель" :)

Мой древний IBExpret за 2013 не хочет показывать октеты. Но я верю - в новейшем это уже асилено :)

Как-то так:

Код: plsql
1.
select rdb$db_key, x.rdb$relation_name from rdb$relations x


<картинка>
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920488
Евгений Болтик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийЕвгений БолтикОстался только вопрос почему нельзя DB_KEY показать как VARCHAR?

Используй нормальный "показыватель" :)

Мой древний IBExpret за 2013 не хочет показывать октеты. Но я верю - в новейшем это уже асилено :)

Как-то так:

Код: plsql
1.
select rdb$db_key, x.rdb$relation_name from rdb$relations x


<картинка>

Обрати внимание у меня на картинке в моем гриде rdb$db_key выводится не выводится в варианте cast. А эксперт вообще пустые поля показал, но я списал это на глюк эксперта, я им пользуюсь по случаю, а обновление качать не когда.
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920493
na-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
na-
Гость
Dimitry SibiryakovЕвгений БолтикОстался только вопрос почему нельзя DB_KEY показать как VARCHAR?

Потому что он CHAR CHARACTER SET OCTETS и мой тикет об автоматическом преобразовании в HEX
при касте в любую другую кодировку отвергли.

Может есть системная функция типа OctetsToHex?
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920509
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений БолтикОбрати внимание у меня на картинке в моем гриде rdb$db_key выводится не выводится в варианте cast. А эксперт вообще пустые поля показал, но я списал это на глюк эксперта, я им пользуюсь по случаю, а обновление качать не когда.

Точно :)

Ну, наверное, так и задумано. А может CAST неправильно работает. Похоже кодовая страница прикручивается. Надо покопаться.

--------
Я тут отключил rtrim char-ов и задумался над увиденным:

select cast(rdb$db_key as varchar(18) character set octets), rdb$db_key from RDB$FIELDS

По-идее содержимое колонки DB_KEY в твоем и моем случае должно быть одинаковым. Однако почему-то оно разное :)

Ставлю на баг в моей картинке :)
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920518
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийНу, наверное, так и задумано. А может CAST неправильно работает. Похоже кодовая страница прикручивается. Надо покопаться.


cast(rdb$db_key as varchar(18))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
-		xsqlvar	{sqltype=449 sqlscale=0 sqlsubtype=52 ...}	const isc_api::XSQLVAR_V1 &
		sqltype	449	short
		sqlscale	0	short
		 sqlsubtype	52	short   <----------------- !!!???
		sqllen	18	short
+		sqldata	0x00000000 <NULL>	char *
+		sqlind	0x00000000 {???}	short *
		sqlname_length	4	short
+		sqlname	0x042eb996 "CAST"	char[32]
		relname_length	0	short
+		relname	0x042eb9b8 ""	char[32]
		ownname_length	0	short
+		ownname	0x042eb9da ""	char[32]
		aliasname_length	4	short
+		aliasname	0x042eb9fc "CAST"	char[32]

Сервер прикрутил к этому CAST-у кодовую страницу базы данных по-умолчанию - win1251 (id: 52).

Внезапно :)

Кодовая страница подключения не указана (то есть она NONE).
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920525
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийСервер прикрутил к этому CAST-у кодовую страницу базы данных по-умолчанию - win1251 (id: 52).

Внезапно :)

Кодовая страница подключения не указана (то есть она NONE).

<пошаговое исследование проблемы>

А если указать кодовую страницу подключения UTF8 (как вариант), то сервер назначит её этому CAST-у.

По мне - в отношении октетов это ненормально :)
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920576
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий,

мне кажется, вы с Женей забыли, что с-шные строки заканчиваются нулем. поэтому каст просто к варчару не работает, строка сразу "обрубается".
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920621
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvКоваленко Дмитрий,

мне кажется, вы с Женей забыли, что с-шные строки заканчиваются нулем . поэтому каст просто к варчару не работает, строка сразу "обрубается".

Не, я про это не забыл (хотя после месяца с C#, C++ и кажется марсианской письменностью).

Речь про то, что CAST меняет кодовую страницу. А он (по-хорошему) не должен это делать. По крайней мере с OCTETS.

Вообщем с этим вроде все ясно.

Непонятно - почему у нас разный DB_KEY . Была мысль, что причина в различии FB1.5 и FB2.5.

Но на полуторке у меня все так же, как и на 2.5

У меня DB_KEY первой записи - 02 00 00 00 01 00 00 00

Отладчик показывает содержимое XSQLVAR::sqldata - 02 00 00 00 01 00 00 00

А Жени - 00 00 00 20 00 00 00 10

Возникает вопрос - у кого косяк? :)
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920633
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийУ меня DB_KEY первой записи - 02 00 00 00 01 00 00 00

Отладчик показывает содержимое XSQLVAR::sqldata - 02 00 00 00 01 00 00 00

А Жени - 00 00 00 20 00 00 00 10

Возникает вопрос - у кого косяк? :)

На всякий случай я уже раскопал до самого нижнего уровня.
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920650
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал с FB3 (несвежий) - "cast(rdb$db_key as varchar(18))" продолжает менять кодовую страницу

Возник второй вопрос. К Жене. А в чем сакральный смысл этого каста? :)
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920744
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко ДмитрийНепонятно - почему у нас разный DB_KEY . Была мысль, что причина в различии FB1.5 и FB2.5.

Но на полуторке у меня все так же, как и на 2.5

У меня DB_KEY первой записи - 02 00 00 00 01 00 00 00

Отладчик показывает содержимое XSQLVAR::sqldata - 02 00 00 00 01 00 00 00

А Жени - 00 00 00 20 00 00 00 10

Возникает вопрос - у кого косяк? :)Ты показываешь строку байт, как она лежит в памяти, а IBE у Евгения интерпретирует dbkey как два 4-х байтных числа.
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920746
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladIBE у Евгения интерпретирует dbkey как два 4-х байтных числа.И это, кстати, неправильно :)
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38920835
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladhvladIBE у Евгения интерпретирует dbkey как два 4-х байтных числа.И это, кстати, неправильно :)
Судя по всему, у него и эти числа неправильно в HEX трансформируются.
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38921093
Евгений Болтик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvКоваленко Дмитрий,

мне кажется, вы с Женей забыли, что с-шные строки заканчиваются нулем. поэтому каст просто к варчару не работает, строка сразу "обрубается".

Не мы такое забыть не можем. По большей части я этим и занимаюсь в интерпретаторе определением типов и порядка работы с данными. Поэтому табу забывать низкий уровень. ;)

У нас есть поле и если оно бинарное, то и пусть мне вернется строка в шестнадцатеричном виде. Пусть это будет особенность нашего любимого сервера. А так надо еще и УДФ прикручивать. Почему для работы с бинарными типами у компиляторов и интерпретаторов функция по умолчанию есть, а в сервере нет. Раз он оперирует такими данными то и функции должны быть. Тогда не будет лишних тем и будут прямые ответы. Вон функция пользуйся.
...
Рейтинг: 0 / 0
rdb$db_key и его содержимое
    #38921135
Евгений Болтик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladhvladIBE у Евгения интерпретирует dbkey как два 4-х байтных числа.И это, кстати, неправильно :)

Вчера уже срубило в 4 ночи и дальше не смог беседовать.

Сегодня увидел в ФБ+
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function  TFIBStringField.GetAsDB_KEY:string;
var
  i : Integer;
  p : TDataBuffer;
begin
  if not GetDataToReserveBuffer then
  begin
    Result:='';
  end
  else
  for i := 0 to (Size div 4) - 1 do
  begin
      p:=FReservedBuffer;
      Inc(p,i*4);
      Result := Result + Format('%-8.8x', [PInteger(p)^]);
  end;
end;



зачем оно там так сделано не знаю.

Бузз уже давно на письма не отвечает, что с ним кто знает?
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / rdb$db_key и его содержимое
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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