powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывод более одной строки...
5 сообщений из 5, страница 1 из 1
Вывод более одной строки...
    #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
Вывод более одной строки...
    #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
Вывод более одной строки...
    #32148399
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По древовидной структуре и ее разбору посмотри тут\r
\r
а в твоем случае чтоб избавится от ошибки про которую ты толкуешь нужно заменить ...objectind=(select... на ...objectind in (select...
...
Рейтинг: 0 / 0
Вывод более одной строки...
    #32148428
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю хорошо это или плохо, но я использовал вариант со вспомогательной таблицей, которая состоит из двух столбцов:1 - номер субъекта; 2 - номера всех его "детей", в т.ч. вложенных и самого себя...
Все выборки упрощаются, нет необходимости в ХП, правда необходимо писать кучу триггеров..
...
Рейтинг: 0 / 0
Вывод более одной строки...
    #32149011
Фотография KiLLun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем большое, уже разобрался.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вывод более одной строки...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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