powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / execute statement...
13 сообщений из 13, страница 1 из 1
execute statement...
    #39316023
Riss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день господа )))

Fierbird 2.1

Создал UDF ping
Проверил - работает
Код: sql
1.
select ping("10.168.49.204",20) from rdb$database


загнал выражение в поле таблицы
Пытаюсь выполнить через ...
Код: sql
1.
2.
3.
4.
5.
6.
  declare variable  vk varchar(500);
  ...
  for select pl from tbl into :vk do begin
    execute statement(:vk)  into :zn;
    ...
  end


Выдает ошибку - не существует колонка 10.168.49.204
...
Рейтинг: 0 / 0
execute statement...
    #39316026
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riss, попробуй одинарные кавычки.
...
Рейтинг: 0 / 0
execute statement...
    #39316029
Riss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ))) 2 часа траха и не догадаться )))
...
Рейтинг: 0 / 0
execute statement...
    #39316032
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RissСпасибо ))) 2 часа траха и не догадаться )))
Судя по идее засунуть ping в udf - это твое любимое занятие.
...
Рейтинг: 0 / 0
execute statement...
    #39316034
Riss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо)) Изврат - это класс - поверь красиво получилось )))
...
Рейтинг: 0 / 0
execute statement...
    #39316056
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riss, посылать буфер нужной длины и содержания твоя UDF умеет, чтобы будить компы через icmp redirect?
...
Рейтинг: 0 / 0
execute statement...
    #39316066
Riss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev.
Прочитал про ICMP - хороший механизм. Через него будет правильнее - по возможности изучу поглубже.
Спасибо за инфу
...
Рейтинг: 0 / 0
execute statement...
    #39316073
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riss, так ping всегда работает на ICMP... ICMP, это родной протокол утилиты ping. И вообще я бы передавал адрес хоста в UDF через INTEGER с порядком байт BE.
Конвертер:
Код: plsql
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
SET TERM ^ ;
CREATE OR ALTER PROCEDURE "IPv4ToLong"
  (
    "IPv4" VARCHAR(15) CHARACTER SET ASCII DEFAULT NULL
  )
  RETURNS
  (
    "Long" INTEGER
  )
AS
  DECLARE VARIABLE dot1 SMALLINT DEFAULT 0;
  DECLARE VARIABLE dot2 SMALLINT DEFAULT 0;
  DECLARE VARIABLE dot3 SMALLINT DEFAULT 0;
  DECLARE VARIABLE oct0 SMALLINT DEFAULT 0;
  DECLARE VARIABLE oct1 SMALLINT DEFAULT 0;
  DECLARE VARIABLE oct2 SMALLINT DEFAULT 0;
  DECLARE VARIABLE oct3 SMALLINT DEFAULT 0;
BEGIN
  "Long" = NULL;
  IF ("IPv4" IS NOT NULL) THEN
    BEGIN
      dot1 = Position('.', "IPv4");
      IF (dot1 > 0) THEN dot2 = Position('.', "IPv4", dot1 + 1);
      IF (dot2 > 0) THEN dot3 = Position('.', "IPv4", dot2 + 1);
      IF (dot3 > 0) THEN
        BEGIN
          oct0 = Cast(Substring("IPv4" FROM 1 FOR dot1 - 1) AS SMALLINT);
          oct1 = Cast(Substring("IPv4" FROM dot1 + 1 FOR dot2 - dot1 - 1) AS SMALLINT);
          oct2 = Cast(Substring("IPv4" FROM dot2 + 1 FOR dot3 - dot2 - 1) AS SMALLINT);
          oct3 = Cast(Substring("IPv4" FROM dot3 + 1) AS SMALLINT);
          "Long" = oct0;
          "Long" = Bin_Or("Long", Bin_Shl(oct1, 8));
          "Long" = Bin_Or("Long", Bin_Shl(oct2, 16));
          IF (oct3 > 127) THEN
            "Long" = Bin_Or("Long", Bin_Shl(oct3 - 256, 24));
          ELSE
            "Long" = Bin_Or("Long", Bin_Shl(oct3, 24));
        END
    END
  SUSPEND;
END^
SET TERM ; ^

Еще рекомендую добавить в эту библиотеку UDF функционал на подобии nslookup для резолва IP адресов хостов по имени.
...
Рейтинг: 0 / 0
execute statement...
    #39316086
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
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.
26.
27.
28.
CREATE DOMAIN IPV4_PLAIN AS VARCHAR(15) CHARACTER SET ASCII;

SET TERM ^ ;
CREATE OR ALTER PROCEDURE "LongToIPv4"
  (
    "Long" INTEGER DEFAULT NULL
  )
  RETURNS 
  (
    "IPv4" IPV4_PLAIN
  )
AS
BEGIN
  IF ("Long" IS NOT NULL) THEN
    BEGIN
      "IPv4" = Cast(Bin_And("Long", 255) AS IPV4_PLAIN)
          || '.'
          || Cast(Bin_And(Bin_Shr("Long", 8), 255) AS IPV4_PLAIN)
          || '.'
          || Cast(Bin_And(Bin_Shr("Long", 16), 255) AS IPV4_PLAIN)
          || '.'
          || Cast(Bin_And(Bin_Shr("Long", 24), 255) AS IPV4_PLAIN);
    END
  ELSE
    "IPv4" = NULL;
  SUSPEND;
END^
SET TERM ; ^
...
Рейтинг: 0 / 0
execute statement...
    #39316090
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
маразм
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
execute statement...
    #39316095
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, ну почему сразу "маразм"? В некоторых случаях очень удобно иметь такой функционал (ping, nslookup) на сервере FirebirdSQL, если, к примеру, реализуешь какую-нибудь БД для удаленного АйТи обслуживания по SLA, чтобы не писать отдельную службу сервера для реализации этого функционала и использовать этот функционал через UDF.
...
Рейтинг: 0 / 0
execute statement...
    #39316106
Riss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Век живи, век учись ... и все равно ....
Спасибо rdb_dev )))
...
Рейтинг: 0 / 0
execute statement...
    #39316251
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riss, вдруг пригодится:
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE DOMAIN IPV4_PLAIN VARCHAR(15) CHARACTER SET ASCII
  CHECK(VALUE SIMILAR TO
  '((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2}).){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})');
CREATE DOMAIN FQDN VARCHAR(255) CHARACTER SET ASCII
  CHECK(VALUE SIMILAR TO
  '(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9]).?');
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / execute statement...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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