Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывод более одной строки... / 5 сообщений из 5, страница 1 из 1
24.04.2003, 15:39
    #32148020
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод более одной строки...
Всем привет. У меня такая задача. Использую IB 6.0+IBX.
Мне надо сделать вывод всех объектов-детей висящих на объекте-родителе.
Использую такую ХП:
CREATE PROCEDURE TYPE_P
RETURNS (
ID INTEGER,
NAME VARCHAR(500))
AS
begin
for select objectind from PValues
where Ind=443 into :id
do begin
select IVal from PValues
where Ind=511 and objectind=(select IND from objects where parentind=:id) into :Name;
suspend;
end
end

Если на родителе висит один объект, то все нормально. Если больше одного выкидывает ошибку: multiple rows in singleton select
Что придумать? Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
24.04.2003, 16:32
    #32148111
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод более одной строки...
У меня работает так:
Код: plaintext
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.
CREATE PROCEDURE SELECT_ALL_CHILD_OBJECTS (
    RKOD SMALLINT)
RETURNS (
    KOD SMALLINT,
    P_KOD SMALLINT,
    CHILDS SMALLINT,
    LEVELS SMALLINT,
    NAME VARCHAR( 100 ),
    ACCOUNT_EXPENS VARCHAR( 10 ))
AS
DECLARE VARIABLE CUR_KOD SMALLINT;
DECLARE VARIABLE CUR_P_KOD SMALLINT;
BEGIN
    FOR SELECT OBJ_ALL.KOD, OBJ_ALL.P_KOD, OBJ_ALL.CHILDS, OBJ_ALL.LEVELS,
            OBJ_ALL.NAME, OBJ_ALL.ACCOUNT_EXPENS /*╧┼╨┼┴╚╨└┼╠ ┬╤┼ ╬┴┌┼╩╥█*/ 
        FROM OBJECTS OBJ_ALL
        WHERE LEVELS <>  0 
        ORDER BY OBJ_ALL.KOD
        INTO :KOD, :P_KOD, :CHILDS, :LEVELS, :NAME, :ACCOUNT_EXPENS
    DO
    BEGIN
        CUR_KOD = :P_KOD;
        WHILE (NOT :CUR_KOD IS NULL) DO
        BEGIN
            SELECT O.KOD, O.P_KOD FROM OBJECTS O
            WHERE O.KOD = :CUR_KOD
            INTO :CUR_KOD, :CUR_P_KOD;
            IF (:CUR_KOD = :RKOD) THEN
            BEGIN
                CUR_KOD = NULL;
                SUSPEND;
            END
            ELSE
                CUR_KOD = :CUR_P_KOD;
        END
    END
END

Табла объектов стандартная : KOD - код объекта, P_KOD - код родителя

И посмотри ниже по топикам гдето уже рассматривался такой вопрос.
...
Рейтинг: 0 / 0
25.04.2003, 03:07
    #32148399
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод более одной строки...
По древовидной структуре и ее разбору посмотри тут\r
\r
а в твоем случае чтоб избавится от ошибки про которую ты толкуешь нужно заменить ...objectind=(select... на ...objectind in (select...
...
Рейтинг: 0 / 0
25.04.2003, 07:47
    #32148428
Евгений, Екатеринбург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод более одной строки...
Не знаю хорошо это или плохо, но я использовал вариант со вспомогательной таблицей, которая состоит из двух столбцов:1 - номер субъекта; 2 - номера всех его "детей", в т.ч. вложенных и самого себя...
Все выборки упрощаются, нет необходимости в ХП, правда необходимо писать кучу триггеров..
...
Рейтинг: 0 / 0
25.04.2003, 15:11
    #32149011
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод более одной строки...
Спасибо всем большое, уже разобрался.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывод более одной строки... / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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