Форум: "Базы";
Текущий архив: 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.041 c