Я использую Oracle Apex 5.1 для создания примера приложения. Я пытаюсь создать новые текстовые поля на основе числа, введенного в поле. На данный момент актеры в этой пьесе:
- P11_TESTBOX: текстовое поле, содержащее количество необходимых новых полей.
- ТЕСТ: кнопка, которая при нажатии запускает необходимые динамические действия.
- Процедура TEST_THIS: процедура PL/SQL, которая при нажатии на кнопку запускается и создает необходимые поля.
Процедура, как написано сейчас (просто пытаюсь проверить, смогу ли я заставить ее работать перед полной реализацией):
CREATE OR REPLACE PROCEDURE TEST_THIS (
HOW_MANY IN NUMBER)
IS
BEGIN
FOR I IN 1..HOW_MANY LOOP
HTP.P('<input class="dynamicBoxes" id="P11_BOX_' || I || '" type="text" value="" />');
HTP.P('<br/>');
END LOOP;
END;
Как обычно, я устанавливаю динамическое действие на TEST: для события установлено значение «Click», тип выбора — «Button», кнопка — «TEST», область действия — «Static». Истинное действие — «Выполнить код PL/SQL», которое представляет собой простой вызов процедуры HOW_MANY
с передачей :P11_TESTBOX в качестве номера. Я продолжал получать ошибку
Вызов Ajax вернул ошибку сервера ORA-06502: PL/SQL: ошибка числового значения или значения для выполнения кода PL/SQL
Думая, что я схожу с ума (что, честно говоря, не так уж далеко от истины на данный момент), я добавил функцию «Выполнение кода JavaScript»:
alert(document.getElementById('P11_TESTBOX').value);
Неудивительно, что число, введенное в ящик, было возвращено. К сожалению, ошибка все равно появилась.
Стремясь убедиться, что я испробовал все, я изменил синтаксис процедуры PL/SQL:
CREATE OR REPLACE PROCEDURE TEST_THIS (
HOW_MANY IN NUMBER)
IS
BEGIN
FOR I IN 1..HOW_MANY LOOP
HTP.P(
apex_item.text(
p_idx => 'P11_NEWBOX_0' || I,
p_Value => ''
)
);
END LOOP;
END;
Результат: оповещение по-прежнему дает мне номер; ошибка все еще следует.
Идея попробовать обе версии возникла на этом сайте.
Просто чтобы опередить себя, как только я смогу разобраться с этой проблемой, мне нужно будет захватить все значения, введенные в созданные текстовые поля, и вставить их в базу данных. Я надеюсь, что это так же просто, как использование любых созданных идентификаторов, но я не оптимистичен после этой проблемы. Любая помощь будет принята с благодарностью.
p_idx
, если переменной, которая сама является числом, недостаточно, то, вероятно, мне придется использовать другие средства для достижения этой цели. - person fireside68   schedule 12.04.2018