Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
4 / 4 / 5
Регистрация: 30.09.2013
Сообщений: 82
1

Не работает функция добавления данных из коллекции в таблицу

19.06.2014, 14:55. Показов 1726. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не работает функция добавления данных из коллекции в таблицу
Код
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE
 b_id NUMBER;
 l_count NUMBER;
 t_number NUMBER;
BEGIN
 t_number := :P34_Table;
 l_count := APEX_COLLECTION.COLLECTION_MEMBER_COUNT( p_collection_name => 'my_booking');
 FOR i IN 1..l_count LOOP
    SELECT C001
    INTO b_id
    FROM apex_collections 
    WHERE collection_name = 'my_booking' AND ROWNUM = i;
        INSERT INTO BOOKINGS (b_id,tables,Data,Ready)
        VALUES(b_id,t_number,SYSDATE(),0);
  END LOOP;
END;
Ошибки нет, но не добавляет
P.S. Названия полей все правильные

Добавлено через 16 минут
спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2014, 14:55
Ответы с готовыми решениями:

Не работает функция добавления данных в класс C++
Добрый день всем. Задание: создать клас для хранения БД (тел. справочник). Создать производный...

Функция добавления значений в таблицу по условию
Здравствуйте, не знаю как реализовать функцию, которая делает следующее. Если вводится, например,...

Не работает запрос добавления строки в таблицу
Доброго времени суток... Когда делаю запрос в таблицу так QSqlQuery query; query.exec("INSERT...

Не работает цикл добавления в умную таблицу
Люди добрые помогите чайнику, не могу понять почему не работает цикл. Задача такая, нужно в умной...

6
13 / 13 / 2
Регистрация: 31.03.2013
Сообщений: 107
19.06.2014, 20:46 2
Первое, в чём ошибка, если я не ошибаюсь нельзя использовать выражение SELECT ... INTO для более чем 1 строки, а у вас из-за выражения ROWNUM=i будет извлекаться более чем 1 запись. Во вторых для заполнения коллекции используйте BULK COLLECT. Пример:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROCEDURE process_all_rows
IS
   TYPE employees_aat 
   IS TABLE OF employees%ROWTYPE
      INDEX BY PLS_INTEGER;
   l_employees employees_aat;
BEGIN
   SELECT *
   BULK COLLECT INTO l_employees
      FROM employees;
     
   FOR indx IN 1 .. l_employees.COUNT 
   LOOP
       analyze_compensation 
      (l_employees(indx));
   END LOOP;
END process_all_rows;
Очень похоже на то, что вам нужно, переделать под себя думаю труда не составит. ссылка источника : http://www.oracle.com/technetw... 95155.html
1
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
20.06.2014, 09:24 3
Запрос вида:
SQL
1
SELECT * FROM any_table WHERE rownum = 2
всегда возвращает ноль строк
0
4 / 4 / 5
Регистрация: 30.09.2013
Сообщений: 82
21.06.2014, 01:22  [ТС] 4
KuKu, почему?
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
21.06.2014, 09:11 5
Ну вот оракл так сделал. Это номер строки в рез. запросе - нет первой строки, нет и второй.
Да и вообще весь этот цикл скорее всего можно переписать:
SQL
1
2
INSERT INTO BOOKINGS (b_id,TABLES,DATA,Ready)
SELECT бла-бла FROM apex_collections WHERE бла-бла
1
4 / 4 / 5
Регистрация: 30.09.2013
Сообщений: 82
21.06.2014, 10:01  [ТС] 6
KuKu,
Переписал, заработало.
Но теперь другой вопрос
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DECLARE
var_b_id NUMBER;
var_i_id NUMBER;
I_l_count NUMBER;
l_count NUMBER;
t_number NUMBER;
BEGIN
t_number := :P34_Table;
l_count := APEX_COLLECTION.COLLECTION_MEMBER_COUNT( p_collection_name => 'my_booking');
FOR i IN 1..l_count LOOP
 
SELECT C001 INTO var_b_id FROM apex_collections WHERE COLLECTION_NAME='MY_BOOKING' AND seq_id=i;
 
INSERT INTO BOOKINGS (b_id,tables,Data,Ready)
VALUES(VAR_B_ID,t_number,SYSDATE(),0);
 
UPDATE INGTES
SET I_COUNT =I_COUNT-(SELECT COUNT FROM ingres_for_Blud WHERE var_b_id=b_id AND ROWNUM <2 ) 
WHERE ID=(SELECT i_id FROM ingres_for_blud WHERE var_b_id=b_id AND rownum<2);
END LOOP;
END;
Как сделать так, чтобы
SQL
1
2
SET I_COUNT =I_COUNT-(SELECT COUNT FROM ingres_for_Blud WHERE var_b_id=b_id AND rownum <2 ) 
WHERE ID=(SELECT i_id FROM ingres_for_blud WHERE var_b_id=b_id AND rownum<2);
выбирала не одно поле, а все поля если убрать rownum, то не выполняется запрос =(
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
21.06.2014, 16:03 7
Потому что запрос без rownum возвращает больше одной строки. И непонятно что с этими числами делать - в общем случае это значит, что вы делаете что-то неверно.
1
21.06.2014, 16:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2014, 16:03
Помогаю со студенческими работами здесь

Не работает функция добавления в бд
Здравствуйте. Нужна помощь с добавлением пользователей в бд через php, выдает одинаковые ошибки и я...

Не работает функция добавления информации в бд
Help, please! Сказать, что я в PHP новичок - вообще ничего не сказать.. Делаю подобие...

Отмена добавления данных в таблицу
Здравствуйте, подскажите пожалуйста как мне отменить добавление данных в таблицу? Добавляю данные...

Не работает Вторая функция добавления input
function AddItemr() уже не работает, совсем, а вот - function AddItem() работает. Подскажите как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru