Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Где тут ошибка? / 25 сообщений из 29, страница 1 из 2
23.12.2014, 16:47
    #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
23.12.2014, 16:50
    #38840866
vlad333
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
автор END;
Это не дельфи, запяточие не нужно после end.
...
Рейтинг: 0 / 0
23.12.2014, 16:51
    #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
23.12.2014, 16:52
    #38840871
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
vlad333автор END;
Это не дельфи, запяточие не нужно после end.

и так не хочет с тем же сообщением
...
Рейтинг: 0 / 0
23.12.2014, 16:55
    #38840883
vlad333
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
Вообще все переписать, по-хорошему надо.
...
Рейтинг: 0 / 0
23.12.2014, 16:59
    #38840887
o_v_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
Один DO на два FOR ?..
Так не бывает :)
...
Рейтинг: 0 / 0
23.12.2014, 17:01
    #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
23.12.2014, 17:15
    #38840915
o_v_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
Ну, собственно на это тебе и намекнули. :) Каждому FOR свой DO
...
Рейтинг: 0 / 0
23.12.2014, 17:19
    #38840919
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
o_v_aНу, собственно на это тебе и намекнули. :) Каждому FOR свой DO

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

а, кстати, что тут криминального?
...
Рейтинг: 0 / 0
23.12.2014, 20:17
    #38841076
kdv
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
23.12.2014, 20:29
    #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
23.12.2014, 20:35
    #38841080
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
Их документации

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

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

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

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

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

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

Ну если для тебя изврат и говнокод не аргумент... :) Впрочем, никто
не настаивает, пиши как хочешь, если коллеги не против.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.12.2014, 10:47
    #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
24.12.2014, 11:53
    #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
24.12.2014, 12:01
    #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
24.12.2014, 12:37
    #38841565
roadster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
MaratIskпоскольку номер улицы может меняться просто беру первое значениену так избавь сервер от лишнего запроса, сделай ему приятное, ограничься присвоением значений переменным.
...
Рейтинг: 0 / 0
24.12.2014, 13:14
    #38841619
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
MaratIskда ладно вам материться :)Вспоминается контекст про "индусский код", "зарплата от кол-ва строк кода", "зарплата в днях" и т.п.
...
Рейтинг: 0 / 0
24.12.2014, 14:53
    #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
24.12.2014, 15:37
    #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
24.12.2014, 15:45
    #38841815
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где тут ошибка?
MaratIskтупица,ты по делу пришел или потрындеть?

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


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