powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Где тут ошибка?
25 сообщений из 29, страница 1 из 2
Где тут ошибка?
    #38840858
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
43.
44.
SET TERM ^ ;
CREATE PROCEDURE SP_CUSTOMER_FORM (
    PCST_ID Varchar(50) )
RETURNS (
    CST_ID Varchar(50),
    CST_NO Integer,
    CST_NAME Varchar(250),
    CST_STREET Integer,
    CST_HOUSE Varchar(250),
    CST_APT Varchar(10),
    CST_STATUS Integer,
    CST_MEMO Blob sub_type 1)
AS
BEGIN
	
    IF (EXISTS (SELECT cst_id FROM TB_CUSTOMERS WHERE cst_id = :PCST_ID)) THEN BEGIN

      FOR SELECT a.CST_ID, a.CST_NO, a.CST_NAME, a.CST_STREET, a.CST_HOUSE, a.CST_APT, a.CST_STATUS, a.CST_MEMO
	        FROM TB_CUSTOMERS a
	       WHERE a.CST_ID = :pCST_ID
	        INTO :CST_ID, :CST_NO, :CST_NAME, :CST_STREET, :CST_HOUSE, :CST_APT, :CST_STATUS, :CST_MEMO;

    END ELSE BEGIN

      FOR SELECT UUID_TO_CHAR(GEN_UUID()) AS CST_ID, 
                 ROUND(CEIL(RAND() * -10000000)) AS CST_NO, 
                 'ФИО' AS CST_NAME, 
                 111 AS CST_STREET, 
                 'Дом №' AS CST_HOUSE, 
                 'Кв №' AS CST_APT, 
                 0 AS CST_STATUS, 
                 '' AS CST_MEMO
	        FROM RDB$DATABASE a
	        INTO :CST_ID, :CST_NO, :CST_NAME, :CST_STREET, :CST_HOUSE, :CST_APT, :CST_STATUS, :CST_MEMO;

    END;

	DO
	BEGIN
		SUSPEND;
	END

END^
SET TERM ; ^



ни в какую не хочет переварить, ругаясь

SQL error code = -104
Token unknown - line 21, column 101
;
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38840866
vlad333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор END;
Это не дельфи, запяточие не нужно после end.
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38840868
crazypiggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
  FOR SELECT a.CST_ID, a.CST_NO, a.CST_NAME, a.CST_STREET, a.CST_HOUSE, a.CST_APT, a.CST_STATUS, a.CST_MEMO
	        FROM TB_CUSTOMERS a
	       WHERE a.CST_ID = :pCST_ID
	        INTO :CST_ID, :CST_NO, :CST_NAME, :CST_STREET, :CST_HOUSE, :CST_APT, :CST_STATUS, :CST_MEMO;

    END ELSE BEGIN


После for ... into ... разве не должно идти do а у Вас сразу end и else
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38840871
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad333автор END;
Это не дельфи, запяточие не нужно после end.

и так не хочет с тем же сообщением
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38840883
vlad333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще все переписать, по-хорошему надо.
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38840887
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один DO на два FOR ?..
Так не бывает :)
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38840894
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оказалось так работает

Код: 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.
43.
44.
45.
46.
47.
48.
SET TERM ^ ;
CREATE PROCEDURE SP_CUSTOMER_FORM (
    PCST_ID Varchar(50) )
RETURNS (
    CST_ID Varchar(50),
    CST_NO Integer,
    CST_NAME Varchar(250),
    CST_STREET Integer,
    CST_HOUSE Varchar(250),
    CST_APT Varchar(10),
    CST_STATUS Integer,
    CST_MEMO Blob sub_type 1)
AS
BEGIN
	
    IF (EXISTS (SELECT cst_id FROM TB_CUSTOMERS WHERE cst_id = :PCST_ID)) THEN BEGIN

      FOR SELECT a.CST_ID, a.CST_NO, a.CST_NAME, a.CST_STREET, a.CST_HOUSE, a.CST_APT, a.CST_STATUS, a.CST_MEMO
	        FROM TB_CUSTOMERS a
	       WHERE a.CST_ID = :pCST_ID
	        INTO :CST_ID, :CST_NO, :CST_NAME, :CST_STREET, :CST_HOUSE, :CST_APT, :CST_STATUS, :CST_MEMO
	  DO
	    BEGIN
		  SUSPEND;
	  END
	
    END ELSE BEGIN

      FOR SELECT UUID_TO_CHAR(GEN_UUID()) AS CST_ID, 
                 ROUND(CEIL(RAND() * -10000000)) AS CST_NO, 
                 'ФИО' AS CST_NAME, 
                 111 AS CST_STREET, 
                 'Дом №' AS CST_HOUSE, 
                 'Кв №' AS CST_APT, 
                 0 AS CST_STATUS, 
                 '' AS CST_MEMO
	        FROM RDB$DATABASE a
	        INTO :CST_ID, :CST_NO, :CST_NAME, :CST_STREET, :CST_HOUSE, :CST_APT, :CST_STATUS, :CST_MEMO
	  DO
	    BEGIN
		  SUSPEND;
	  END

    END

END^

SET TERM ; ^
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38840915
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, собственно на это тебе и намекнули. :) Каждому FOR свой DO
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38840919
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o_v_aНу, собственно на это тебе и намекнули. :) Каждому FOR свой DO

догадался :)
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841065
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad333Вообще все переписать, по-хорошему надо.

а, кстати, что тут криминального?
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841076
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIskа, кстати, что тут криминального?
for select из rdb$database - это просто анекдот. Почему бы просто переменным не присвоить значения? Зачем такой изврат?

вот это
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
FOR SELECT UUID_TO_CHAR(GEN_UUID()) AS CST_ID, 
                 ROUND(CEIL(RAND() * -10000000)) AS CST_NO, 
                 'ФИО' AS CST_NAME, 
                 111 AS CST_STREET, 
                 'Дом №' AS CST_HOUSE, 
                 'Кв №' AS CST_APT, 
                 0 AS CST_STATUS, 
                 '' AS CST_MEMO
	        FROM RDB$DATABASE a
	        INTO :CST_ID, :CST_NO, :CST_NAME, :CST_STREET, :CST_HOUSE, :CST_APT, :CST_STATUS, :CST_MEMO


элементарно заменяется на
CST_ID = UUID_TO_CHAR(GEN_UUID());
CST_NO = ROUND(CEIL(RAND() * -10000000));
CST_NAME = 'ФИО';
и так далее.
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841078
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvMaratIskа, кстати, что тут криминального?
for select из rdb$database - это просто анекдот. Почему бы просто переменным не присвоить значения? Зачем такой изврат?

вот это
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
FOR SELECT UUID_TO_CHAR(GEN_UUID()) AS CST_ID, 
                 ROUND(CEIL(RAND() * -10000000)) AS CST_NO, 
                 'ФИО' AS CST_NAME, 
                 111 AS CST_STREET, 
                 'Дом №' AS CST_HOUSE, 
                 'Кв №' AS CST_APT, 
                 0 AS CST_STATUS, 
                 '' AS CST_MEMO
	        FROM RDB$DATABASE a
	        INTO :CST_ID, :CST_NO, :CST_NAME, :CST_STREET, :CST_HOUSE, :CST_APT, :CST_STATUS, :CST_MEMO


элементарно заменяется на
CST_ID = UUID_TO_CHAR(GEN_UUID());
CST_NO = ROUND(CEIL(RAND() * -10000000));
CST_NAME = 'ФИО';
и так далее.

привычка из Oracle from DUAL :)
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841080
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Их документации

Для тех, кто не знаком с RDB$DATABASE: это системная таблица, которая
всегда существует во всех базах данных Firebird и всегда содержит только одну
строку. И, хотя эта таблица не была создана специально для этой цели, стало
распространенной практикой среди разработчиков Firebird выполнять запросы к
этой таблице в случае, если нужно выполнить запрос, не привязанный ни к
какой таблице, в котором результат получается из выражений, указанных в
списке полей оператора SELECT.
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841088
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIsk,

ну не в PSQL же. Можно конечно, но изврат
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841126
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисMaratIsk,

ну не в PSQL же. Можно конечно, но изврат

не аргумент :)
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841132
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIskне аргумент :)
аргумент в том, что когда в PSQL можно просто присвоить переменной значение функции, вряд-ли для этого стоит дергать обращение к таблице (лишний дисковый ввод-вывод).
Просто в старых faq и прочем слишком часто вариант select gen_id(...) from rdb$database глаза мозолил, вот люди "не думая" такой же вызов втыкают в триггеры и процедуры.
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841154
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIsk> привычка из Oracle from DUAL :)

Oracle тоже замечательно умеет в PL/SQL c переменными, функциями
и выражениями без лишних запросов работать, так что не надо.
NextVal - да, до 11-й версии не умел без DUAL-а (щас умеет, но это по
сути обёртка-синтаксический сахар AFAIK).

MaratIsk> не аргумент :)

Ну если для тебя изврат и говнокод не аргумент... :) Впрочем, никто
не настаивает, пиши как хочешь, если коллеги не против.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841383
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ладно вам материться :)

окончательный вариант все равно такой

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
      FOR SELECT UUID_TO_CHAR(GEN_UUID()) AS CST_ID, 
                 ROUND(CEIL(RAND() * -10000000)) AS CST_NO, 
                 'ФИО' AS CST_NAME, 
                 str.STR_NO AS CST_STREET, 
                 'Дом №' AS CST_HOUSE, 
                 'Кв №' AS CST_APT, 
                 0 AS CST_STATUS, 
                 '' AS CST_MEMO
	        FROM TB_STREETS str ORDER BY STR_NO ROWS 1
	        INTO :CST_ID, :CST_NO, :CST_NAME, :CST_STREET, :CST_HOUSE, :CST_APT, :CST_STATUS, :CST_MEMO
	  DO
	    BEGIN
		  SUSPEND;
	  END
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841501
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIsk
Код: plsql
1.
2.
3.
4.
 ...
str.STR_NO AS CST_STREET, 
                ...
	        FROM TB_STREETS str ORDER BY STR_NO ROWS 1


то есть тебе неважно какой STR_NO будет получен?
зачем тогда городить огород с запросом?
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841515
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadsterMaratIsk
Код: plsql
1.
2.
3.
4.
 ...
str.STR_NO AS CST_STREET, 
                ...
	        FROM TB_STREETS str ORDER BY STR_NO ROWS 1


то есть тебе неважно какой STR_NO будет получен?
зачем тогда городить огород с запросом?

это дефолтовое значение для поля в таблице TB_CUSTOMERS
только и всего
а поскольку номер улицы может меняться просто беру первое значение
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841565
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIskпоскольку номер улицы может меняться просто беру первое значениену так избавь сервер от лишнего запроса, сделай ему приятное, ограничься присвоением значений переменным.
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841619
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIskда ладно вам материться :)Вспоминается контекст про "индусский код", "зарплата от кол-ва строк кода", "зарплата в днях" и т.п.
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841732
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тупица,

усовершенствуй

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT UUID_TO_CHAR(GEN_UUID()) AS CST_ID, 
                 ROUND(CEIL(RAND() * -10000000)) AS CST_NO, 
                 'ФИО' AS CST_NAME, 
                 str.STR_NO AS CST_STREET, 
                 'Дом №' AS CST_HOUSE, 
                 'Кв №' AS CST_APT, 
                 0 AS CST_STATUS, 
                 '' AS CST_MEMO
	        FROM TB_STREETS str ORDER BY STR_NO ROWS 1

[/quot]

это к Ivan_Pisarevsky,
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841794
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIskтупица,

усовершенствуймда...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
:CST_ID := UUID_TO_CHAR(GEN_UUID());
:CST_NO := ROUND(CEIL(RAND() * -10000000));
:CST_NAME := 'ФИО'
:CST_STREET := 8;
:CST_HOUSE := 'Дом №';
:CST_APT :=  'Кв №';
:CST_STATUS := 0;
:CST_MEMO := '';


первые 2 сроки не сработают?
...
Рейтинг: 0 / 0
Где тут ошибка?
    #38841815
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIskтупица,ты по делу пришел или потрындеть?

По существу тебе уже и КДВ и Родстер ответили, если непонятно, то может чем попроще заняться?
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Где тут ошибка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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