Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: PL SQL + оракл + ява и + проблема :(  (Прочитано 6547 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SnegniyBARSik
Гость
« : 16-08-2009 09:28 » 

Доброго времени суток господа... а проблема у меня такая, может кто подскажет чего я не так наделал Жаль
Значится есть у меня в оракле табличка, на этой табличке висит триггер, как только в табличку Инсертится строка, эта строка отправляется этим триггером на определенный ИП + ПОРТ, путем вызова java процедуры,которая открывает сокет и посылает сообщение.
вооот, затем программа получившая сообщение, коечо делает и инсертит следующую строку инициализации уже для другой программы, и вот этот триггер по идее должен эту вторую строку отправить этой второй программе, а он её никуда не отправляет Жаль т.е. он срабатывает один раз получается, хотя опцию for each row я прописал.

вот триггер:
Код:
create or replace trigger MY_MAIN_TRIGGER
  before insert on my_main_table for each row
declare
  v_ntfcn_to_nm varchar2(15);
  v_url varchar2(20);   
  v_ip varchar2(15);
  v_port varchar2(4);
  v_buf_str varchar2(5000);
begin
     v_ntfcn_to_nm:=:new.ntfcn_to_nm;
     select t.url into v_url from my_table_with_url t where t.module_nm=v_ntfcn_to_nm;
     v_ip:=substr(v_url,0,length(v_url)-5);
     v_port:=substr(v_url,length(v_url)-3,4);
     v_buf_str:=:new.activity_smry_seqno||'*'||:new.event_seqno||'*'||:new.workfl_stream||'*'||:new.adtnl_args||'*'||:new.status;
     MY_PROC_OUT_MSG(v_ip, v_port, v_buf_str);

end MY_MAIN_TRIGGER;
заранее большое спасибо за помощь и потраченное на меня время.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-08-2009 09:48 » 

SnegniyBARSik, попробуй для отладки заменить MY_PROC_OUT_MSG на DBMS_OUTPUT.PUT_LINE - посмотри, что у тебя получается. Вероятно трабла внутри MY_PROC_OUT_MSG.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
SnegniyBARSik
Гость
« Ответ #2 : 16-08-2009 09:59 » 

RXL, ага. поменял, потестил, вроде триггер срабатывает все время и как надо выводит сообщение но тогда не пойму что не так с процедурой отправки, ибо по первому инсерту то она срабатывает как надо, а вот потом не хочет.
вот процедурка

Код:
create or replace and compile java source named out_message as
import java.io.*;
import java.net.*;
import java.io.IOException;
import java.io.InputStream;
import java.lang.String;

public class OUT_MSG{
  public static void output_msg(String host1, String port, String command)throws IOException{
        Socket fromserver=null;
        int i=0;
        i=Integer.parseInt(port);
        fromserver = new Socket(host1, i);
        PrintWriter out = new PrintWriter(fromserver.getOutputStream(),true);
        out.println(command);
        out.close();
        fromserver.close();
  }
}
« Последнее редактирование: 16-08-2009 10:01 от SnegniyBARSik » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 16-08-2009 11:41 » 

Полагаю, что лучше сделать посылку через сеть асинхронно - через очередь или таблицу и внешний процесс.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
SnegniyBARSik
Гость
« Ответ #4 : 16-08-2009 12:42 » 

я читал про Oracle Streams и все такое, наверное ты помнишь я уже задавался этим вопросом тут...но я так ничего и не понял:( ну это ладно... так тоже работает нормально...надо только смотреть внимательно что пишешь.
Короче проблема была вот в чем:
в триггере переменная -  v_ntfcn_to_nm varchar2(15); длина - 15, а второй инсерт вставляет строку с этим полем в 20 символов, в результате переполнение буфера, и ни о какой отправке не может быть и речи. вот и все...
да балбес блин! писал писал все нормально, а тут такая тупая ошибка...
в общем все, вопрос решен, тема закрыта:)

спасибо за помощь,RXL  Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines