Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / EXECUTE BLOCK в ibexpert / 14 сообщений из 14, страница 1 из 1
16.07.2020, 20:48
    #39980647
parallax113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
всем привет
не получатся выполнить этот код в ibexpert(2020.7.16.2)
ругается на поле select rec = count(*) from t2;

суть такая что нужно внести рандомные значения в поле NUM таблицы t2, в диапазоне max min полей NUM из таблицы t1
какбы логику сделал, а реализовать не получается

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
EXECUTE BLOCK 
AS

DECLARE c int;
DECLARE rec int;

select rec = count(*) from t2;
SET c = 1;

WHILE c <= rec;
BEGIN

UPDATE t2 SET  "NUM" = (SELECT CAST(TRUNC(RAND() *
	     (select MAX("NUM") from t1) + 
             (select MIN("NUM") from t1) FROM RDB$DATABASE) WHERE ID = c;


SET c = c + 1;
END
...
Рейтинг: 0 / 0
16.07.2020, 20:55
    #39980649
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
parallax113

ругается на поле select rec = count(*) from t2;

это ты чего сделать хотел?
...
Рейтинг: 0 / 0
16.07.2020, 20:57
    #39980650
parallax113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
Мимопроходящий
parallax113

ругается на поле select rec = count(*) from t2;

это ты чего сделать хотел?


в переменную rec поместить количество строк таблицы t2

кстати извиняюсь, ошибся в update запросе :
Код: css
1.
2.
3.
UPDATE t2 SET  "NUM" = (SELECT CAST(TRUNC(RAND() *
	     (select MAX("NUM") from t1) + 
             (select MIN("NUM") from t1)) as INTEGER) FROM RDB$DATABASE) WHERE ID = c;


забыл к CAST добавить as INTEGER

но вопрос ещё актуален
...
Рейтинг: 0 / 0
16.07.2020, 21:15
    #39980653
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
parallax113

в переменную rec поместить количество строк таблицы t2

здесь вам не там
Код: sql
1.
select count(*) from t2 into :rec;


ну или если уж совсем хочется через присвоение
Код: sql
1.
rec=(select count(*) from t2);
...
Рейтинг: 0 / 0
16.07.2020, 21:20
    #39980656
parallax113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
m7m
parallax113

в переменную rec поместить количество строк таблицы t2

здесь вам не там
Код: sql
1.
select count(*) from t2 into :rec;


ну или если уж совсем хочется через присвоение
Код: sql
1.
rec=(select count(*) from t2);



Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 7, column 1.
SELECT.

во всех вариантах
...
Рейтинг: 0 / 0
16.07.2020, 21:21
    #39980658
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
parallax113,

синтаксис подучи. С процедурами полностью совпадает (кроме заголовка).
...
Рейтинг: 0 / 0
17.07.2020, 07:54
    #39980742
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
Если сам тест на профпригодность не прошел, то ответ под спойлером.
Нет банального begin после секции деклараций и соотв. end в конце.
...
Рейтинг: 0 / 0
18.07.2020, 08:21
    #39981200
parallax113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
короче ладно всем спасибо

запрос работает рекурсивно, без вайл-лупов и лишней логики, вот так:
Код: plsql
1.
2.
3.
UPDATE t2 SET  "NUM" = (SELECT CAST(TRUNC(RAND() *
	     (select MAX("NUM") from t1) + 
             (select MIN("NUM") from t1)) as INTEGER) FROM RDB$DATABASE);



собственно так и быстрее будет
...
Рейтинг: 0 / 0
18.07.2020, 11:03
    #39981230
AltHasp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
parallax113,

Для чего двойные кавычки используете ?
...
Рейтинг: 0 / 0
18.07.2020, 11:38
    #39981237
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
parallax113,

Тогда бы еще и вынес предварительные вычисления MAX() и MIN() из собственно апдейта.
...
Рейтинг: 0 / 0
18.07.2020, 12:28
    #39981250
parallax113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
AltHasp
parallax113,

Для чего двойные кавычки используете ?

артефакт =)
...
Рейтинг: 0 / 0
18.07.2020, 12:32
    #39981252
parallax113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
AltHasp
parallax113,

Для чего двойные кавычки используете ?


артефакт =)
...
Рейтинг: 0 / 0
18.07.2020, 12:33
    #39981253
parallax113
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
Vlad F
parallax113,

Тогда бы еще и вынес предварительные вычисления MAX() и MIN() из собственно апдейта.

кстати да
...
Рейтинг: 0 / 0
19.07.2020, 01:02
    #39981417
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXECUTE BLOCK в ibexpert
parallax113артефакт =)
глаза не лопнут? лучше от этого избавиться.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / EXECUTE BLOCK в ibexpert / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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