powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / EXECUTE BLOCK в ibexpert
14 сообщений из 14, страница 1 из 1
EXECUTE BLOCK в ibexpert
    #39980647
parallax113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет
не получатся выполнить этот код в 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
EXECUTE BLOCK в ibexpert
    #39980649
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parallax113

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

это ты чего сделать хотел?
...
Рейтинг: 0 / 0
EXECUTE BLOCK в ibexpert
    #39980650
parallax113
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
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
EXECUTE BLOCK в ibexpert
    #39980653
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parallax113

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

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


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

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

запрос работает рекурсивно, без вайл-лупов и лишней логики, вот так:
Код: 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
EXECUTE BLOCK в ibexpert
    #39981230
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parallax113,

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

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

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

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

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


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

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

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


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