powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Сравнение при insert в таблицу
10 сообщений из 35, страница 2 из 2
Сравнение при insert в таблицу
    #37642041
stuart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторда, но туда можно и любых других полей добавить которые отсутствуют в данной таблице, ни кто не запрещает, например поле из другой таблицы, просто в подпрограммах заполнять и работать с ним

уже ответили на мой вопрос ))
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37642095
Фотография pan159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простейший пример merge:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure save_filter(module varchar2, filt varchar2) is
begin
    merge into user_filter u
    using (select user a, module m, filt b from dual) n
    on ( u.user_name = n.a and u.module = n.m) 
    when matched then update set u.filter = n.b
    when not matched then insert (user_name, module, filter)
    values(n.a,n.m,n.b);  
end;
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37642123
stuart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pan159,

и потом эта процедура вызывается из оракл формс?
и when matched означает совпадение строк в таблице?
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37643316
stuart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще вопрос, как привязать :блок1.поле1 и :блок1.поле2 привязать к этой процедуре?
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37646405
OldBoyOdeSu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stuart,

ы спрашиваешь базовые вещи, на которые у меня лично нет времени отвечать, доку смотри, по 4.5 есть на русском, хотя на самом деле мне тоже в своё время старшие объесняли что да как... если тебе сильно надо опиши мнен подробно полностью задачу, постаруюсь помочь...
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37646424
OldBoyOdeSu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. мне от тебя не надо инсёрты всякие и прочую лабуду, которая у тебя по 2 строки вставляет, опиши в подробностях что тебе надо, я тебе тогда скажу возможные, оптимальные пути решения на формс, так как я понял что ты в них вообще не сечёшь...

опступление, они щас двигают свобю ADF in JDeveloper, говорят что круче формс... да уж, это полный пиз... надо знать всю кухню J2EE чтоб написать что то серьёзное... ха, тут я свой фрэймворк делал для гос проекта, он на 35% быстрей TopLink, короче атас эта ADF...
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37647885
stuart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldBoyOdeSu, я попытался сделать процедуру как описано выше и она у меня не сработала, да я в фрмсах совсем новичек.

В общем суть залачи - есть кнопка и несколько полей, привязанных к блоку. Надо чтобы по нажатию клавиши срабатывал insert и вставлял информацию из этих полей. Это я сделал, ошибку с 2 строками исправил.

Теперь самое интересное - надо чтобы с insert срабатывало условие, если поле в таблице совпадает с полем введенным на форме :блок1.поле1 то выдавать ошибку. Ваша вышеописанная программа по этому поводу теоретически правильна, но не работает в моем случае.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE z_test(id VARCHAR2(5), val VARCHAR2(5))
/
--v forme block1.item1 is z_test.id; block1.item2 is z_test.val
begin
    insert into z_test(id, val)
    select :block1.item1, :block1.item2
    from dual
    where not exists(select 1 from z_test where val = :block1.item2);
        
    if(sql%rowcount = 0)then
        --record is found
        --error;
        null;
    end if;

end;
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37648204
stuart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моем конкретном случае не хочет отрабатываться следующее условие:

Код: plsql
1.
2.
3.
4.
5.
	go_block('блок1');
  insert into (select поле1, поле2 from table
  where :блок1.поле1 <> поле1)                     
  values  (:блок1.поле1, :блок1.поле2);
  commit_form; 



форма на фразу where просто не реагирует
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37648287
OldBoyOdeSu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stuart,

я так понял что данные на форме ты ниоткуда не подгружаешь, иначе надо исправить slc процедуру чтоб она брала нормальные данные, так же в данном случае инсёрт процедура не нужна

принцып такой:
1)есть таблица
CREATE TABLE z_test(id VARCHAR2(5), val VARCHAR2(5))

2)создаёшь пакет в БД
Код: plsql
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.
38.
39.
40.
41.
42.
43.
44.
45.
REATE OR REPLACE 
PACKAGE zt_form
IS
type r_block is record(
  id 		number, 
  field_1 	varchar2(100)
);
type t_block is table of r_block index by pls_integer;

procedure slc_block(p_t in out nocopy t_block, p_id number); 
procedure upd_block(p_t in out nocopy t_block);  

END; -- Package spec
/


CREATE OR REPLACE 
PACKAGE BODY zt_form
IS
FIELD_DUPLICATE       EXCEPTION; PRAGMA EXCEPTION_INIT(FIELD_DUPLICATE, -20003);

procedure slc_block(p_t in out nocopy t_block, p_id number)
is
begin
    select null, null
    into p_t(1).id, p_t(1).field_1
    from dual;
end;

procedure upd_block(p_t in out nocopy t_block)
is
begin
    insert into z_test(id, val)
    select p_t(1).id, p_t(1).field_1
    from dual
    where not exists(select 1 from z_test where val = p_t(1).field_1);
        
    if(sql%rowcount = 0)then
        raise FIELD_DUPLICATE;
    end if;
end;

   -- Enter further code below as specified in the Package spec.
END;
/



3)Форму создаёшь
create new block wizard -> select procedure(ZT_FORM.slc_block) Refresh, database items >> (ID, FIELD_1)
argument p_id (0 - dummy)

Next>>
Insert procedure = null не используем
Update procedure = ZT_FORM.upd_block, Refresh

на канву поместить эти элементы, сделать кнопку на тригер(WHEN-BUTTON-PRESSED) повешать такой код:
commit_form;

на форме тригер (WHEN-NEW-FORM-INSTANCE):
go_block('BLOCK7');
execute_query;

тригер ON-LOCK
null;

триггер ON-ERROR
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DECLARE 
  errnum NUMBER        := ERROR_CODE; 
  errtxt VARCHAR2(100) := substr(ERROR_TEXT,1,100); 
  errtyp VARCHAR2(3)   := ERROR_TYPE; 
  db_err varchar2(80);
BEGIN 
		db_err:=substr(errtxt,instr(errtxt,'ORA-',-1,1)+4);
		if db_err between 20000 and 20999 then
	  	if db_err = 20003 then
	  		Message('RECORD DUPLICATE!!!', ACKNOWLEDGE); 
	  	end if;			
		end if;
end;



Это набросок формы, дальше сам
...
Рейтинг: 0 / 0
Сравнение при insert в таблицу
    #37648334
stuart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Сравнение при insert в таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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