Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Invalid Column Reference   Найти похожие ветки 

 
Stupid   (2004-04-27 12:00) [0]

Пишет : Invalid Column Reference. Или нельзя одновременно получить Count и значение поля?

CREATE PROCEDURE CLEAR_ONCE_KONSTR
AS
  DECLARE VARIABLE TEK_PR INTEGER;
  DECLARE VARIABLE TEK_SKON INTEGER;
  DECLARE VARIABLE TEK_DAUDZ INTEGER;
BEGIN
  FOR SELECT ID_PR
  FROM PROJEKT
  INTO :TEK_PR
  DO BEGIN
     SELECT ID_SKON, COUNT(DISTINCT ID_SKON)
     FROM SUB_KON
     WHERE ID_PR = :TEK_PR AND IETILP_ID = 0
     INTO :TEK_SKON, :TEK_DAUDZ;

     IF (:TEK_DAUDZ = 1) THEN
     BEGIN
        UPDATE SUB_KON SET IETILP_ID = 0 WHERE IETILP_ID = :TEK_SKON;
        DELETE FROM SUB_KON WHERE ID_SKON = :TEK_SKON;
     END
  END
END;


 
Курдль ©   (2004-04-27 12:03) [1]

А у Вас INTO на своем месте стоит?


 
Stupid   (2004-04-27 12:06) [2]

А где должен быть?

такой запрос проходит без проблем :
CREATE PROCEDURE CLEAR_ONCE_KONSTR
AS
  DECLARE VARIABLE TEK_PR INTEGER;
  DECLARE VARIABLE TEK_SKON INTEGER;
  DECLARE VARIABLE TEK_DAUDZ INTEGER;
BEGIN
  FOR SELECT ID_PR
  FROM PROJEKT
  INTO :TEK_PR
  DO BEGIN
     SELECT ID_SKON, ID_PR
     FROM SUB_KON
     WHERE ID_PR = :TEK_PR AND IETILP_ID = 0
     INTO :TEK_SKON, :TEK_DAUDZ;

     IF (:TEK_DAUDZ = 1) THEN
     BEGIN
        UPDATE SUB_KON SET IETILP_ID = 0 WHERE IETILP_ID = :TEK_SKON;
        DELETE FROM SUB_KON WHERE ID_SKON = :TEK_SKON;
     END
  END
END;


 
Соловьев ©   (2004-04-27 12:07) [3]


> SELECT ID_SKON, COUNT(DISTINCT ID_SKON)
>      FROM SUB_KON
>      WHERE ID_PR = :TEK_PR AND IETILP_ID = 0

+FOR
+GROUP BY ID_SKON
+DO
-DISTINCT


 
Соловьев ©   (2004-04-27 12:12) [4]


>     SELECT ID_SKON, ID_PR
>      FROM SUB_KON
>      WHERE ID_PR = :TEK_PR AND IETILP_ID = 0
>      INTO :TEK_SKON, :TEK_DAUDZ;

что этим запросом хочешь получить?


 
Stupid   (2004-04-27 12:14) [5]

Соловьев, зачем мне FOR?

Мне нужно определить кол-во записей попадающих под условие, и если такая запись только одна - удалить её и сделать некоторве изменения в других записях.


 
Stupid   (2004-04-27 12:17) [6]

>     SELECT ID_SKON, ID_PR
>      FROM SUB_KON
>      WHERE ID_PR = :TEK_PR AND IETILP_ID = 0
>      INTO :TEK_SKON, :TEK_DAUDZ;

этим запросом ничего не хочу, просто для эксперимента ввёл. компилятор его пропустил, значит структура запроса правильна.
выходит что count с чем-то не дружит.


 
Курдль ©   (2004-04-27 12:18) [7]


> Мне нужно определить кол-во записей попадающих под условие,
> и если такая запись только одна - удалить её и сделать некоторве
> изменения в других записях.

А зачем тогда count? if exists не подходит? :)


 
Соловьев ©   (2004-04-27 12:19) [8]


> зачем мне FOR?

Потому как может быть возвращено несколько строк


> Мне нужно определить кол-во записей попадающих под условие


> SELECT ID_SKON, COUNT(DISTINCT ID_SKON)
>      FROM SUB_KON
>      WHERE ID_PR = :TEK_PR AND IETILP_ID = 0
>      INTO :TEK_SKON, :TEK_DAUDZ;

бред сивой кобылы - без обид.
Можешь написать конкретно что за условия и структура таблиц?


 
Курдль ©   (2004-04-27 12:22) [9]


> А зачем тогда count? if exists не подходит? :)

Фигню сморозил-с :)


 
Stupid   (2004-04-27 12:22) [10]

если будет возвращено несколько строк, мне с ними ничего делать не надо. мне нужно сделать что-то только тогда, когда возвращается только одна запись.


 
Курдль ©   (2004-04-27 12:25) [11]

А загнать в курсор и посчитать (это я так - фантазирую, с ИБ почти не работал).


 
Stupid   (2004-04-27 12:29) [12]

пока сделал так:

CREATE PROCEDURE CLEAR_ONCE_KONSTR
AS
  DECLARE VARIABLE TEK_PR INTEGER;
  DECLARE VARIABLE TEK_SKON INTEGER;
  DECLARE VARIABLE TEK_DAUDZ INTEGER;
BEGIN
  FOR SELECT ID_PR
  FROM PROJEKT
  INTO :TEK_PR
  DO BEGIN
     SELECT COUNT(DISTINCT ID_SKON)
     FROM SUB_KON
     WHERE ID_PR = :TEK_PR AND IETILP_ID = 0
     INTO :TEK_DAUDZ;

     IF (:TEK_DAUDZ = 1) THEN
     BEGIN
        SELECT ID_SKON
        FROM SUB_KON
        WHERE ID_PR = :TEK_PR AND IETILP_ID = 0
        INTO :TEK_SKON;

        UPDATE SUB_KON SET IETILP_ID = 0 WHERE IETILP_ID = :TEK_SKON;
        DELETE FROM SUB_KON WHERE ID_SKON = :TEK_SKON;
     END
  END
END;

но не хотелось бы делать 2 запроса, один на проверку кол-ва записей, а другой на получение нужного ID. надеюсь можно как-то это дело объединить.


 
HSolo ©   (2004-04-27 14:23) [13]

SELECT ID_SKON, COUNT(ID_SKON)
 FROM SUB_KON
 WHERE ID_PR = :TEK_PR AND IETILP_ID = 0
 GROUP BY ID_SKON
 HAVING COUNT(ID_SKON) = 1


 
Соловьев ©   (2004-04-27 14:33) [14]


> HSolo ©   (27.04.04 14:23) [13]

где гарантия что будет возвращено только 1 строка?


 
HSolo ©   (2004-04-27 14:34) [15]

> где гарантия что будет возвращено только 1 строка?
Никакой. Поэтому - for select... Это просто пример запроса, возвращающего те ID, количество которых ровно 1. Чтобы не делать 2 запроса :)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.033 c
14-1083468735
mfender
2004-05-02 07:32
2004.05.23
Я вижу в нем "американский английский" ! :)


9-1073499972
ork
2004-01-07 21:26
2004.05.23
Текстовая RPG


3-1083253108
Mister
2004-04-29 19:38
2004.05.23
обработка False


11-1069402107
Gandalf
2003-11-21 11:08
2004.05.23
Apollo project?


3-1083237481
Felan
2004-04-29 15:18
2004.05.23
Системные переменные Interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский