Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с процедурой 
:(
    Опции темы
dron000
Дата 9.1.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.9.2006

Репутация: нет
Всего: нет



Не работает процедура приема почты:

Код

CREATE PROCEDURE TEST_POP3_BIO_2 is
type MailRec is record(
addr_p varchar2(500),
from_p varchar2(500),
to_p varchar2(500), 
subj_p varchar2(500), 
date1_p varchar2(500), 
leng_p integer); 
type MailTableType is 
table of MailRec index by binary_integer;
MailTable MailTableType; 
---- 
host_p varchar2(25) :='pop.mail.ru';
user_p varchar2(25) :='******';
pass_p varchar2(25) :='******';
c utl_tcp.connection;
i smallint := 0;
nn smallint := 0;
z nvarchar2(32767) := 'none';
---------------------------------------
x1 smallint := 0;
x2 smallint := 0;
x0 smallint := 0;
nn2 smallint := 0;
file1 UTL_FILE.FILE_TYPE;
y varchar2(32767) := '';
--data VARCHAR2(256);
z2 varchar2(32767) := '';
z21 varchar2(32767) := '';
z22 varchar2(32767) := '';
z3 varchar2(1) := '';
d1 smallint := 0;
d2 smallint := 0;
d3 varchar2(500);
cod smallint := 0;
mail_nn INTEGER;
--
datep_p smallint := 0;
subp_p smallint := 0;
top_p smallint := 0;
fromp_p smallint := 0;

--

begin
--utl_tcp.close_connection(c);
c := utl_tcp.open_connection(host_p, 110);
if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
y := utl_tcp.write_line(c, 'user '||user_p);
if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
y := utl_tcp.write_line(c, 'pass '||pass_p);
if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
y := utl_tcp.write_line(c, 'list');
if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
loop 
z := utl_tcp.get_line(c,true); 
exit when substr(z,1,1) = '.';
nn := to_number(substr(z,1,instr(z,' ',1))); 
MailTable(nn).leng_p := to_number(substr(z,instr(z,' ')+1)); 
end loop; 
if nn > 0 then 
x1:=1;
end if;
for nn in 1..MailTable.count loop 
i := utl_tcp.write_line(c, 'retr '||nn); 
i:= 0;
x2:= 0; 
if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
select SEQ_POP3_1.nextval --sequences 
into mail_nn
from dual;

  --execute immediate
--' create or replace directory '||temp||' as '''||'c:\ecologic\temp'||'''';----ðàñøàðåâàíèå äèðåêòîðèè

file1:= SYS.UTL_FILE.FOPEN('c:\ecologic\temp', 'mail_'||mail_nn||'.eml', 'w'); --íàäî ðàñøàðèòü â Oracle 
z := utl_tcp.get_line(c);
datep_p:= 0;
subp_p:= 0;
top_p:= 0;
fromp_p:= 0; 
if instrb(z,'Return-Path: ')>0 then 
d1:= instr(z,'<')+1;
d2:= instr(z,'>',d1)-d1; 
d3:= substr(z,d1,d2);
MailTable(nn).addr_p:=(d3);
--else
-- MailTable(nn).addr_p:='empty';
end if;
loop
------//tochka
--dbms_output.put_line('tochka-0');
------////tochka 
IF (utl_tcp.available(c) > 0) THEN
if substr(z,1,1) = '.'then 
x0:=length(z);
z:=substr(z,2,x0);
end if; 
z2:=replace(replace(z,chr(13)),chr(10));

------//tochka
--dbms_output.put_line('dl-:'||utl_tcp.available(c));
--dbms_output.put_line('z-:'||substr(z2,1,250));
------////tochka

if length(z2) > 250 then
z21:=substr(z2,1,250);
z22:=substr(z2,251,length(z2));
z21:=replace(replace(z21,chr(13)),chr(10));
z22:=replace(replace(z22,chr(13)),chr(10));
UTL_FILE.put_line(file1, z21);
UTL_FILE.put_line(file1, substr(z22,1,250));
else
UTL_FILE.put_line(file1, z2);
end if;

z := utl_tcp.get_line(c); 
--z := substr(utl_tcp.get_line(c),1,254);
ELSE
x2:= 1;
END IF;
exit when x2 = 1; 

------//tochka
--dbms_output.put_line('RP-:'||instrb(z,'Return-Path: '));
--dbms_output.put_line('z-:'||substr(z2,1,250));
------////tochka

if (instrb(z,'From: ')>0) AND (fromp_p = 0) then 
d1:= instr(z,'<')+1;
d2:= instr(z,'>',d1)-d1; 
d3:= substr(z,d1,d2);
MailTable(nn).from_p := replace(replace(replace(d3,'From: '),chr(13)),chr(10)); 
fromp_p:= 1;
end if;
if (instrb(z,'To: ')>0) AND (top_p = 0) then
d1:= instr(z,'<')+1;
d2:= instr(z,'>',d1)-d1; 
d3:= substr(z,d1,d2);
MailTable(nn).to_p := replace(replace(replace(d3,'To: '),chr(13)),chr(10)); 
top_p:= 1;
end if; 
cod:= 0;
if (instrb(z,'Subject: ')>0) AND (subp_p = 0) then 
------

if instr(z,'B?')>0 then
d1:= instr(z,'B?')+2;
d2:= instr(z,'?=',d1)-d1; 
d3:= substr(z,d1,d2);
if instr(z,'=?koi8-r?B?')>0 then
MailTable(nn).subj_p:= convert(UTL_RAW.cast_to_varchar2(utl_encode.base64_decode(UTL_RAW.cast_to_raw(d3))), 'CL8MSWIN1251', 'CL8KOI8R');
--elsif instr(z,'=?windows-1251?B?')>0 then
-- MailTable(nn).subj_p:= BK.TEST_DEC_1(d3);
else
MailTable(nn).subj_p:= UTL_RAW.cast_to_varchar2(utl_encode.base64_decode(UTL_RAW.cast_to_raw(d3)));
end if;

else
MailTable(nn).subj_p:= replace(replace(replace(z,'Subject: '),chr(13)),chr(10));
end if;
subp_p:= 1; 
------
end if;
if (instrb(z,'Date: ')>0) AND (datep_p = 0) then
MailTable(nn).date1_p:= replace(replace(replace(z,'Date: '),chr(13)),chr(10));
datep_p:= 1;
end if; 
end loop;
------
insert into TEST_EMAIL(nom_t, addr_t, from_t, to_t, subj_t, date1_t)
values(nvl(mail_nn,0), nvl(MailTable(nn).addr_p,'empty'), nvl(MailTable(nn).from_p,'empty'), nvl(MailTable(nn).to_p,'empty'), nvl(MailTable(nn).subj_p,'empty'), nvl(MailTable(nn).date1_p,'empty')); 
------


i:= utl_tcp.write_line(c, 'dele '||nn);
z := utl_tcp.get_line(c);
i:= 0;
------//tochka
--dbms_output.put_line('tochka-1');
------////tochka

SYS.UTL_FILE.FCLOSE(file1);

z := ''; 
end if;
------//tochka
--dbms_output.put_line('tochka-2');
------////tochka 
end loop;
------//tochka
--dbms_output.put_line('tochka-3');
-----////tochka
end if;
------//tochka
--dbms_output.put_line('tochka-4');
------////tochka
end if;
------//tochka
--dbms_output.put_line('tochka-5');
------////tochka
end if;
------//tochka
--dbms_output.put_line('tochka-6');
------////tochka
end if;
------//tochka
--dbms_output.put_line('tochka-7');
------////tochka
i := utl_tcp.write_line(c, 'quit');
---------------------------------------------------------------------------------------------------
--for i in 1..MailTable.count loop 
--dbms_output.put_line('From: '||MailTable(i).from_p);
--dbms_output.put_line('To: '||MailTable(i).to_p);
-- dbms_output.put_line('Subject: '||MailTable(i).subj_p); 
--dbms_output.put_line('------------------------------------------------------'); 
--end loop; 
dbms_output.put_line('ALL: '||MailTable.count); 
---------------------------------------------------------------------------------------------------
UTL_FILE.FCLOSE(file1);
utl_tcp.close_connection(c);
------//tochka
--dbms_output.put_line('tochka-8');
------////tochka
exception
when utl_tcp.end_of_input then
UTL_FILE.FCLOSE(file1);
utl_tcp.close_connection(c);

end;
Код



PM MAIL   Вверх
3x3
Дата 9.1.2007, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 2
Всего: 8



А как вы определили, что она не работает? Она что, ошибки какие-нибудь выдаёт?  smile 


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
dron000
Дата 10.1.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.9.2006

Репутация: нет
Всего: нет



Пишет что не существуют последовательность SEQ_POP3_1.nextval  .
PM MAIL   Вверх
3x3
Дата 10.1.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 2
Всего: 8



И что, такая последовательность в самом деле не существует или PL/SQL компилятор нагло лжёт нам с вами в глаза? 


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
dron000
Дата 10.1.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.9.2006

Репутация: нет
Всего: нет



Ее нет- не знаю как ее описать.
PM MAIL   Вверх
3x3
Дата 10.1.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 2
Всего: 8



Цитата(dron000 @ 10.1.2007,  16:21)
Ее нет- не знаю как ее описать.

Значит проблема не в процедуре, а в том, что у вас отсутствует объект базы данных потому, что вы не знаете как его создать. Для решения вашей проблемы существует очень удобное средство. Помогает только держись.
Вы же не расчитываете в самом деле, что кто-то будет тут писать программы за вас и подгонять вашу базу данных под спертые вами откуда-то программы, о работе которых вы не имеете никакого представления, и, что немаловажно, и не хотите иметь. 


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.