Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Apex 20.2 dblink на oracle 9i / 15 сообщений из 15, страница 1 из 1
09.11.2021, 16:29
    #40110370
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Здравствуйте.
Имеется Oracle 11.2.0.4 с Apex 20.2 на борту. Имеется второй сервер с Oracle 9.2. Конечно есть dblink на oracle 9i. Apex без проблем выбирает данные с oracle 9i через этот самый dblink, но совсем отказывается выполнять DML (insert, update). Делаю стандартный классический отчёт с формой. При попытке создать новую запись даёт ошибку ora-01461. Интересно то, что, если на форме только одно поле varchar2, то запись создаётся. Добавляешь на форму ещё одно поле varchar2 и запись уже не создаётся. Ошибка ora-01461. В таблице и на форме никаких long нет.
...
Рейтинг: 0 / 0
09.11.2021, 17:18
    #40110390
=nomad=
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Не хватает длины поля для вставки? Типа varchar2(20), а на форме передается 4 байта и длина выходит за varchar2(20 BYTE) ?
...
Рейтинг: 0 / 0
09.11.2021, 17:35
    #40110398
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Не думаю. Тогда была бы другая ошибка. С одним полем же прокатывает. Да и размер полей пробовал увеличивать в 3 раза
...
Рейтинг: 0 / 0
09.11.2021, 17:39
    #40110400
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
...
Рейтинг: 0 / 0
10.11.2021, 23:15
    #40110906
Dubanos_II
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
revenko@@,

а как выглядит DML операция, исполняемая формой?
и еще скиньте, пожалуйста, скрипт создания таблицы на стороне 9i, в которую делаете вставку

судя по ошибке, где-то по дороге затесалась попытка вставки в колонку, которая не является varchar2
...
Рейтинг: 0 / 0
11.11.2021, 06:01
    #40110920
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create table T201
(
  nsyst     NUMBER(9),
  fam       VARCHAR2(30),
  imj       VARCHAR2(20),
  otch      VARCHAR2(20),
  d_rojd    NUMBER(2),
  m_rojd    NUMBER(2),
  y_rojd    NUMBER(4),
  n_phone   NUMBER,
  otvet     VARCHAR2(1024),
  ibd_arx   NUMBER(1),
  kodreg    NUMBER(22),
  kodrai    VARCHAR2(20),
  sh_polz   NUMBER(22),
  dt_reg    DATE,
  dt_izm    DATE,
  sh_polz1  NUMBER(22),
  dostup    VARCHAR2(2),
  dt_send   DATE,
  organ     NUMBER(3),
  cn_delarx NUMBER(9),
  fam_init  VARCHAR2(30)
);


Вот предложение, которое генерирует Apex
Код: sql
1.
2.
3.
4.
5.
6.
7.
INSERT INTO
  (SELECT * FROM T201@UPMO2005 WITH CHECK OPTION)
  ("NSYST", "FAM", "IMJ", "OTCH", "D_ROJD", "M_ROJD", "Y_ROJD", "N_PHONE",
   "FAM_INIT", "SH_POLZ")
VALUES
  (:APEX$VAL1, :APEX$VAL2, :APEX$VAL3, :APEX$VAL4, :APEX$VAL5, :APEX$VAL6,
   :APEX$VAL7, :APEX$VAL8, :APEX$VAL9, :APEX$VAL10)
...
Рейтинг: 0 / 0
11.11.2021, 07:45
    #40110924
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
И если точно, то версия Oracle 9.2.0.8
...
Рейтинг: 0 / 0
11.11.2021, 10:55
    #40110961
Michael Isaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
revenko@@,

попробуйте не из под APEX выполнить.

1) У вас вот это работает из под SQL+, Oracle SQL Developer, PLSQLDeveloper и т.д.? (: или & в зависимости от инструмента)?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
INSERT INTO
  (SELECT * FROM T201@UPMO2005 WITH CHECK OPTION)
  ("NSYST", "FAM", "IMJ", "OTCH", "D_ROJD", "M_ROJD", "Y_ROJD", "N_PHONE",
   "FAM_INIT", "SH_POLZ")
VALUES
  (:APEX$VAL1, :APEX$VAL2, :APEX$VAL3, :APEX$VAL4, :APEX$VAL5, :APEX$VAL6,
   :APEX$VAL7, :APEX$VAL8, :APEX$VAL9, :APEX$VAL10)



2) А вот в такой форме работает из под SQL+, Oracle SQL Developer, PLSQLDeveloper и т.д.?

Код: plsql
1.
2.
3.
4.
5.
6.
INSERT INTO T201@UPMO2005  
  ("NSYST", "FAM", "IMJ", "OTCH", "D_ROJD", "M_ROJD", "Y_ROJD", "N_PHONE",
   "FAM_INIT", "SH_POLZ")
VALUES
  (:APEX$VAL1, :APEX$VAL2, :APEX$VAL3, :APEX$VAL4, :APEX$VAL5, :APEX$VAL6,
   :APEX$VAL7, :APEX$VAL8, :APEX$VAL9, :APEX$VAL10)
...
Рейтинг: 0 / 0
11.11.2021, 12:33
    #40110988
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Michael Isaev,

Да. Тут проблем не возникает. Pl/sql Developer не биндит же, а просто подставляет значения.
...
Рейтинг: 0 / 0
11.11.2021, 19:23
    #40111138
Dubanos_II
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
revenko@@,

1. передаете ли вы в любое из текстовых полей одно из следующего: а) NULL, б) число? Если да, попробуйте в конце добивать пробелом. Я сталкивался с подобной проблемой, когда оракл неверно трактовал тип данных при работе по дблинку (похоже, где-то делал неявное преобразование)

2. запустите инсерт в Test Window, которое поддерживает bind variables. Интересно, отработает ли.
...
Рейтинг: 0 / 0
12.11.2021, 05:20
    #40111195
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Dubanos_II,
1. Передаю полностью заполненную форму, значения которой соответствуют типам полей.
2. К сожалению не знаю где этот Test window в Apex. И как его запустить тоже не нагуглил.
...
Рейтинг: 0 / 0
12.11.2021, 08:25
    #40111201
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Хочу напомнить, что форма с одним текстовым полем нормально отрабатывает. Даже если это поле заполнено до максимальной длины. Числовые поля, конечно, вставляются без проблем. Как только добавляю ещё одно текстовое поле, появляется ошибка вставки.
...
Рейтинг: 0 / 0
12.11.2021, 12:11
    #40111263
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Долго помучевшись получилось сделать ввод через хранимую процедуру. Очень не удобный способ.
...
Рейтинг: 0 / 0
12.11.2021, 13:30
    #40111296
Michael Isaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
revenko@@
Долго помучевшись получилось сделать ввод через хранимую процедуру. Очень не удобный способ.

1. Вот видите, все оказалось нормально
2. На самом деле, путь с хранимыми процедурами - самый правильный. Почитайте что такое API, что такое MVC для чего они нужны и почему это хорошо (не обязательно применительно к продуктам Oraсle и PL/SQL, а вообще, и в частности для Oracle APEX). Непосредственный запрос и вставка данных из/в таблицу в APEX - это не самый лучший путь, так как при этом затруднительно сделать форму основанную на данных нескольких таблиц, организовать проверки и бизнес-логику. И этот способ годится разве что для быстрого прототипирования и показа заказчику. А финальную версию надо делать с использованием API на PL/SQL
3. Иногда еще может помочь следующий способ "подсказки Oracle"
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
INSERT INTO T201@UPMO2005  
  ("NSYST", "FAM", "IMJ", "OTCH", "D_ROJD", "M_ROJD", "Y_ROJD", "N_PHONE",
   "FAM_INIT", "SH_POLZ")
VALUES
( TO_NUMBER(:APEX$VAL1)
, SUBSTR(TO_CHAR(:APEX$VAL2),1,30)
, SUBSTR(TO_CHAR(:APEX$VAL3),1,30)
, SUBSTR(TO_CHAR(:APEX$VAL4),1,30)
, TO_NUMBER(:APEX$VAL5)
, TO_NUMBER(:APEX$VAL6)
, TO_NUMBER(:APEX$VAL7)
, TO_NUMBER(:APEX$VAL8)
, SUBSTR(TO_CHAR(:APEX$VAL9),1,30)
, TO_NUMBER(:APEX$VAL10)
)


Но это масло-маслянное.

4. Кстати, почему у вас в таблице на дату рождения не одно поле
Код: plsql
1.
date_birth DATE


а целых 3?
Код: plsql
1.
2.
3.
  d_rojd    NUMBER(2),
  m_rojd    NUMBER(2),
  y_rojd    NUMBER(4),


Мне кажется это какой-то косяк проектирования.
...
Рейтинг: 0 / 0
12.11.2021, 14:17
    #40111337
revenko@@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apex 20.2 dblink на oracle 9i
Michael Isaev,

3 поля было сделано не нами. Клиент тоже был сделан под 3 поля и исходников у нас нет. Не знаю для чего так сделано было.
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Apex 20.2 dblink на oracle 9i / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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