Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: UTL_SMTP multiple recipients

Мне требуется послать мэйл нескольким получателям.

declare
c utl_smtp.connection;
rc integer;
msg_to varchar2(200):='abc1@mail.ru,abc2@mail.ru,abc3@mail.ru,abc4@mail.ru,';
msg_cc varchar2(200):='abc1@mail.ru,abc2@mail.ru,abc3@mail.ru,abc4@mail.ru,';

mailhost VARCHAR2(30) := 'mail.host.local'; 

BEGIN
	c := utl_smtp.open_connection(mailhost, 2525); 
	utl_smtp.helo(c, mailhost);
	utl_smtp.mail(c, msg_from);
	utl_smtp.rcpt(c, msg_to);
	
	utl_smtp.data(c,'From: ROBOT'|| utl_tcp.crlf ||
	'Content-Type: text/html;"'  || utl_tcp.crlf ||
	'To: ' || msg_to || utl_tcp.crlf ||
	'Cc: ' || msg_cc || utl_tcp.crlf ||
	'Subject: ' || msg_subject ||
	utl_tcp.crlf || msg_text);
	utl_smtp.quit(c);
END

насколько я понял utl_smtp.rcpt(c, msg_to); надо вызывать в цикле столько раз сколько есть получателей - пожалуйста подтвердите.
А как CSV строчку разбить и вызывать в цикле?
я подумал так:

i:=0;j:=0;
while j < length(msg_to) loop
  i:=instr(msg_to,',',j) ;
  utl_smtp.rcpt(c, substr(msg_to,i,j));
  j:=i+1;
end loop;
так?
Ответ: Фууххх...

Вот так заработало!

for z in (select '<vasya@somemail.ru>' email from dual) loop
     utl_smtp.rcpt(mail_conn, z.email);
end loop;
Вопрос: Select и UTL_SMTP Oracle

Подскажите как можно через UTL_SMTP отправлять результат select, например Select * from v$version;
Ответ:
SAS2014
dmdmdm
но это уже детский сад.
Да язык разметки страницы я знаю, у меня просто проблема в синтаксисе связки pl\sql и html
одинарные кавычки самый мелкий символ, очень трудно их заметить в документации.
Вопрос: 12.1.0.1 и UTL_SMTP

Коллеги у кого 12.1.0.1 есть и кто UTL_SMTP использует прогоните прилагаемую дурку.
Перед прогоним переменные p_smtp_server, p_sender и p_recipient нужно установить и set serveroutput on.
CREATE OR REPLACE PROCEDURE GPU_MAIL_BUG10201
IS
  p_smtp_server  VARCHAR2(64) := '127.0.0.1';
  p_sender        VARCHAR2(128) := 'root@localhost';
  p_recipient     VARCHAR2(128) := 'root@localhost';
  p_subj          VARCHAR2(128) := 'Error in mail communication';
  p_body          VARCHAR2(128) := utl_tcp.CRLF || chr(46);
  p_smtp_port     NUMBER := 25;
  g_sqlerrm                  VARCHAR2(2000);
  
  v_con       UTL_SMTP.connection;
  v_ret       UTL_SMTP.reply;
  v_msg       VARCHAR2(32000);
  v_headers   VARCHAR2(32000);
  V_BOUNDARY  VARCHAR2 (256) := '-----030503071209010200030100';
  v_retcode   NUMBER:= 0;
  v_repls UTL_SMTP.replies;
  v_body CLOB;
  v_data_lenb NUMBER := 0;
  
  PROCEDURE trace_it(p_text IN VARCHAR2)
  IS
  BEGIN
      DBMS_OUTPUT.put_line(TO_CHAR(SYSTIMESTAMP, 'HH24:MI:SS.FF3') || ' ' || p_text);    
  END trace_it;
  PROCEDURE trace_reply(p_reply IN UTL_SMTP.reply)
  IS
  BEGIN
      trace_it('<--' || p_reply.code || ' ' || p_reply.text);
  END trace_reply;
  FUNCTION create_header(p_name      IN VARCHAR2,
                         p_value     IN VARCHAR2)
  RETURN VARCHAR2
  IS
    v_header VARCHAR2(10000);
  begin
    RETURN p_name || ': ' || p_value || utl_tcp.CRLF;
  END create_header;
  FUNCTION do_mail_from(p_smtp_conn IN OUT NOCOPY  UTL_SMTP.connection,
                        p_sender IN VARCHAR2)
     RETURN UTL_SMTP.reply
  IS
    v_ret UTL_SMTP.reply;
  BEGIN
    v_ret :=UTL_SMTP.mail(p_smtp_conn, p_sender);
    trace_reply(v_ret);
  RETURN v_ret;
END do_mail_from;
FUNCTION do_rcpt(p_smtp_conn     IN OUT NOCOPY  UTL_SMTP.connection,
                 p_recipient     IN VARCHAR2)
RETURN UTL_SMTP.reply
IS
  v_ret UTL_SMTP.reply;
BEGIn
      v_ret := UTL_SMTP.rcpt(p_smtp_conn, p_recipient);
      trace_reply(v_ret);  
  RETURN v_ret;
END do_rcpt;

FUNCTION prepare_subj(p_subj IN VARCHAR2)
  RETURN VARCHAR2
IS

  v_ret  VARCHAR2(32000);
  v_enc_start VARCHAR2(32) := '=?UTF-8?Q?';
  v_enc_end VARCHAR2(32)   := '?=';
  v_max_line_len NUMBER := 75 - length(v_enc_start) - length(v_enc_end);
  v_ch VARCHAR2(1);
  v_ch_encoded VARCHAR2(32);
  v_line_buff VARCHAR2(32000):= NULL;

BEGIN
  FOR i in 0..(length(p_subj) -1) LOOP
    v_ch := substr(p_subj, i +1, 1);
    v_ch_encoded := UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(v_ch)));
    IF (NVL(length(v_line_buff), 0) + length(v_ch_encoded)) < v_max_line_len THEN
      v_line_buff := v_line_buff || v_ch_encoded;
    ELSE
       v_ret := v_ret || v_enc_start || v_line_buff || v_enc_end;
      v_line_buff := v_ch_encoded;
    END IF;
  END LOOP;
  IF v_line_buff IS NOT NULL AND length(v_line_buff) > 0 THEN
    v_ret := v_ret || v_enc_start || v_line_buff || v_enc_end;
  END IF;

 RETURN v_ret;
END prepare_subj;

PROCEDURE send_body(p_smtp_conn  IN OUT NOCOPY UTL_SMTP.connection,
                    p_body       IN CLOB)
IS
 i         pls_integer := 1;
 len       pls_integer;
 buff_size pls_integer := 16000;
 l_raw     raw(16000);
 v_chunk_counter   BINARY_INTEGER := 0;
 l_step        PLS_INTEGER  := 12000; 
 v_buff VARCHAR2(12000);
 v_raw_buff RAW(32000);
BEGIN

len := dbms_lob.getlength(p_body);
trace_it('start body is transmission');

   FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_body) - 1 )/l_step) LOOP
      v_buff := DBMS_LOB.substr(p_body, l_step, i * l_step + 1);
      trace_it('buffer:' || v_buff);
      trace_it('len(buffer) characters:' || length(v_buff));
      v_raw_buff :=  UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(v_buff));
      trace_it('len(raw data) bytes:' || lengthb(v_raw_buff));
      trace_it('raw data:');
      trace_it(v_raw_buff);
      UTL_SMTP.WRITE_RAW_DATA(p_smtp_conn, v_raw_buff);
      v_chunk_counter := v_chunk_counter +1;
    END LOOP;
trace_it('body is trasmitted');
END send_body;

BEGIN
  trace_it('start connect to:' || p_smtp_server);
  v_ret := UTL_SMTP.open_connection(p_smtp_server, NVL(p_smtp_port,25), v_con);
  trace_reply(v_ret);
  IF v_ret.code <>220 THEN
    RETURN ;
  END IF;
  
  v_ret :=  UTL_SMTP.helo(v_con, p_smtp_server);
  trace_reply(v_ret);
  IF v_ret.code <>250 THEN  
    RETURN;
  ELSE
    trace_it('helo OK');
  END IF;


  v_ret :=  do_mail_from(v_con, p_sender);
  trace_reply(v_ret);
  IF v_ret.code <>250 THEN
    RETURN ;
  ELSE
    trace_it('mail from OK');
    
  END IF;

  v_ret := do_rcpt(v_con,p_recipient);
  trace_reply(v_ret);
  IF  v_ret.code not in (250, 251) THEN
   RETURN ;
  ELSE
    trace_it('rcpt to OK');
       
  END IF;

  UTL_SMTP.open_data(v_con);
  trace_it('open_data OK');

  v_headers :=  create_header('Mime-Version', '1.0')
                 || create_header('From', '<' || p_sender || '>')
                 || create_header('To', '<' || p_recipient || '>');


   v_headers :=  v_headers || create_header('Subject', prepare_subj(p_subj));

   v_headers :=  v_headers
                 || create_header('Content-Type', 'text/plain;charset=utf-8')
                 || create_header('Content-Transfer-Encoding', 'quoted-printable');


 UTL_SMTP.write_data(v_con, v_headers || utl_tcp.CRLF);
 --UTL_SMTP.write_data(v_con, utl_tcp.CRLF);
 
 --UTL_SMTP.write_data(v_con, utl_tcp.CRLF);
 trace_it('headers OK');
 send_body(v_con, TO_CLOB(p_body));
 --UTL_SMTP.write_data(v_con, utl_tcp.CRLF);
 trace_it('body OK');
 
 v_ret := UTL_SMTP.close_data(v_con);
 trace_it('Data channel closed:');
 trace_reply(v_ret);
 
 v_ret := UTL_SMTP.quit(v_con);
 trace_it('Session quited:');
 trace_reply(v_ret);
 if v_ret.code <> 221 THEN
   trace_it('Error');
 ELSE
   trace_it('Completed OK');
 END IF;
EXCEPTION
WHEN UTL_SMTP.invalid_operation THEN -- Operation is invalid

  -- emulate failure (RFC3463)
  v_ret.code := 430;
  v_ret.text := 'Invalid operation exception raised by UTL_SMTP';
  RETURN;

WHEN UTL_SMTP.transient_error   THEN -- Transient server error in 400 range

  -- emulate
  v_ret.code := 421;
  v_ret.text := 'Service not available';
  RETURN ;

WHEN UTL_SMTP.permanent_error   THEN  -- Permanent server error in 500 range

  -- emulate
  v_ret.code := 500;
  v_ret.text := 'Permanent Error exception raised by UTL_SMTP';
  RETURN ;

WHEN UTL_SMTP.unsupported_scheme THEN -- Unsupported authentication scheme

  -- emulate
  v_ret.code := 1;
  v_ret.text := 'Unsupported Scheme exception raised by UTL_SMTP';
  RETURN ;

WHEN UTL_SMTP.no_supported_scheme THEN -- No supported authentication scheme

  -- emulate
  v_ret.code := 2;
  v_ret.text := 'No supported Scheme exception raised by UTL_SMTP';
  RETURN ;
WHEN others THEN
  g_sqlerrm := sqlerrm;
  -- emulate
  v_ret.code := 3;
  v_ret.text := SUBSTR(g_sqlerrm, 1, 500);
  RETURN ;
END GPU_MAIL_BUG10201;
Ответ: bug подтвердили, ного растут из Doc ID 806105.1
Вопрос: И снова UTL_SMTP

В Oracle 11g все обстоит несколько сложнее. Пришлось настраивать XML DB и ACL.
Вроде справились с ошибкой

ORA-24248: XML DB extensible security not installed

Сейчас запускаю код, все проходит без ошибок но почта не поступает на ящик.

Вот код:

declare
	v_From VARCHAR2 ( 80 ) := 'My Name <myemail@corporate.net>';
	v_Recipient VARCHAR2 ( 80 ) := 'myemail@corporate.net';
	v_Subject VARCHAR2 ( 80 );
	v_Mail_Host VARCHAR2 ( 30 ) := 'email.server.net';
	v_Mail_Conn utl_smtp.Connection;
	crlf VARCHAR2 ( 2 ) := chr ( 13 ) || chr ( 10 );

begin
  v_Subject:='Report';
	v_Mail_Conn := utl_smtp.Open_Connection ( v_Mail_Host, 25 );
	utl_smtp.Helo ( v_Mail_Conn, v_Mail_Host );
	utl_smtp.Mail ( v_Mail_Conn, v_From );
	utl_smtp.Rcpt ( v_Mail_Conn, v_Recipient );
	utl_smtp.Data ( v_Mail_Conn,
			'From: ' || v_From || crlf ||
			'Subject: ' || v_Subject || crlf ||
			'To: ' || v_Recipient || crlf || crlf ||
			'TEST.'

		      );
	utl_smtp.Quit ( v_mail_conn );
	EXCEPTION
	WHEN utl_smtp.Transient_Error
	  OR utl_smtp.Permanent_Error
	  OR utl_smtp.INVALID_OPERATION
		THEN
			RAISE_APPLICATION_ERROR( - 20000, 'Unable to send mail: ' || sqlerrm );
		WHEN OTHERS
		THEN
			RAISE_APPLICATION_ERROR ( - 20000, 'Other Error: ' || sqlerrm );
end;


Когда с сервера запускаю вот это:
echo "something" | mailx -s "subject" myemail@corporate.net


То почта поступает нормально.

Может кто знает в чём дело? Или как оттрасировать?
Ответ: Большое спасибо, isdenno. Всё заработало :)
Вопрос: Проблема с UTL_SMTP

Доброго дня всем!
Помогите плиз разобраться, не знаю что упустил. Встала задача отправлять почту с корпоративного сервера, решил потренироваться на Яндексе.
Зашел Мозиллой на mail.yandex.ru, скачал сертификаты, создал Oracle wallet и подгрузил туда сертификаты.
Затем прошелся командами
BEGIN
   DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
    acl          => 'ninjasmtp.xml',
    description  => 'Permissions to access SMTP Server',
    principal    => 'SYS',
    is_grant     => TRUE,
    privilege    => 'connect');

  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE (
    acl          => 'ninjasmtp.xml',
    principal    => 'SYS',
    is_grant     => TRUE, 
    privilege    => 'resolve',
    position     => null);

  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
    acl          => 'ninjasmtp.xml',
    host         => 'smtp.yandex.ru',
    lower_port    => 1,
    upper_port    => 1024);
   COMMIT;
END;


на команде
BEGIN
   DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE (
    acl          => 'ninjasmtp.xml',
    principal    => 'SYS',
    is_grant     => TRUE, 
    privilege    => 'use-client-certificates');
  COMMIT;
END;

дает ошибку... Нашел в интернете решение, апдейтом напрямую. Затем указал где лежит валлет
DBMS_NETWORK_ACL_ADMIN.ASSIGN_WALLET_ACL(
    acl         => 'ninjasmtp.xml',
    wallet_path => 'file:C:\1\ynd_wallet');


Вроде все сделал... Но когда в процедуре доходит до места
mail_conn := utl_smtp.open_connection(host => 'smtp.yandex.ru',
                                port => 465,
                                wallet_path => 'file:C:\1\ynd_wallet',
                                wallet_password => 'VCON_2016',
                                secure_connection_before_smtp => FALSE);


зависает намертво... То ли лыжи не едут, то ли ...?
Oracle 11.2.0.2.0
Ответ: вообще команда telnet smtp.yandex.ru 465 не подходит для тестирования порта 465...
Для этого нужно писать команду
"openssl s_client -crlf -connect smtp.yandex.ru:465"
и она отрабатывает на ура... коннект проходит, и я могу даже залогиниться.
Вопрос: Почитать бы почту.. (UTL_SMTP)

Здравствуйте.
Появилась надобность в чтении почты.
Из того, что почитал по темам и нагуглил, понял только, что есть 2 способа: писать на java чтение + обвертку и писать подключение через UTL_SMTP и как-то вычитывать.
Первый вариант делать не хочется, если есть возможность на pl/sql, а на второй не нашел примера.

Поделитесь пожалуйста инфой о том, где можно найти такое решение, если кто сталкивался?
может у кого рабочая либа есть, незащищенная авторскими правами :) приму в дар :)
Ответ:
wolfio
вы не могли бы перевести?
Настолько беспомощный?! -
Вопрос: HTML и utl_smtp

Возможно ли отослать почту через utl_smtp и как это сделать?
Ответ:
SAS2014
У меня тот же вопрос
Конечно же, такие секретные сведения передают только из уст в уста на форумах.
Вестимо, почитал всякие рфц про миме или ... написал себе письмо и посмотрел его содержимое.
Вопрос: OCI + ArcSDE = Проблема записи SDE.ST_GeomFromWKB через OCILobLocator

Прошу помощи! Две недели чтения интернета и апробирования разных способов результата не дали. Также поиск по sql.ru не увенчался успехом.

Исходные данные.

Есть БД, в которой размещаются пространственные данные в формате ArcGIS (St_Geometry).
Соответственно, к СУБД прикручена библиотека st_shapelib.dll.

Есть внешнее приложение (на C++), не использующее API ArcSDE, но читающее и пишущее пространственные данные. Для этого используется формат WKB. Доступ к Oracle осуществляется с помощью OCI.

Для чтения/записи двоичных данных (BLOB) в формате WKB, соответственно, используется OCILobLocator.

Примеры запросов:

чтение
SELECT "OBJECTID", SDE.ST_AsBinary("SHAPE") as "SHAPE" FROM "SDE"."MYTABLE"


запись
UPDATE "SDE"."MYTABLE" SET "SHAPE" = SDE.ST_GeomFromWKB(:GEOM, 3405) WHERE "OBJECTID" = 1



Суть проблемы.

При чтении проблем нет.
При попытке вставки/изменения записи получаю следующую ошибку:
ORA
ORA-03001: unimplemented feature
ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 237
ORA-06512: at "SDE.ST_GEOMETRY_OPERATORS", line 162


При этом вызов со стороны приложения корректен, так как если то же самое делать с таблицей, где поле пространственных данных не SDE.ST_Geometry, а штатное от Oracle Spatial - SDO_GEOMETRY, то запись проходит успешно (само собой, в этом случае через "SHAPE" = MDSYS.SDO_GEOMETRY("SHAPE_BLOB", 3405)).
Значит, BLOB передается корректно.

Что любопытно, выполнение в отношении ArcSDE того же кода и с теми же данными, что вызывает OCI-приложение, но из SQL Developer-а, отрабатывает замечательно!

-- Это работает!
DECLARE 
  :GEOM BLOB; 
BEGIN
  :GEOM := HEXTORAW('010200000004000000b6f3fdd497961341c74b37097b2042418941606596961341819543bb822042416f1283c05f971341ac1c5a149d20424175931884829613410ad7a350b6204241');  

  UPDATE "SDE"."MYTABLE" SET "SHAPE" = SDE.ST_GeomFromWKB(:GEOM, 3405) WHERE "OBJECTID" = 1;
END;
SELECT SDE.St_AsText(SHAPE) AS SHAPE FROM "SDE"."MYTABLE" WHERE "OBJECTID" = 1

Значит, библиотека st_shapelib.dll прикручена корректно.


Откуда тогда "ORA-03001: unimplemented feature" при вызове через OCI именно SDE.ST_GeomFromWKB?

Что-то понять по
ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 237
ORA-06512: at "SDE.ST_GEOMETRY_OPERATORS", line 162
тоже не получается, так как указанные строки не проясняют суть проблемы и, возможно, вообще к ней не относятся:
SDE.ST_GEOMETRY_SHAPELIB_PKG
+
create or replace Package st_geometry_shapelib_pkg AS
/******************************************************************************
name: iso_Shapelib
purpose:

revisions:
ver date author description
--------- ---------- --------------- ------------------------------------
1.0 3/6/2005 1. created this package.
******************************************************************************/

c_package_release Constant pls_integer := 1111;

Procedure geometryfromtext (shptxt IN clob,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
Type IN number,
numpts IN Out number,
entity IN Out number,
minx IN Out number,
miny IN Out number,
maxx IN Out number,
maxy IN Out number,
minz IN Out number,
maxz IN Out number,
minm IN Out number,
maxm IN Out number,
area IN Out number,
len IN Out number,
points IN Out blob);

Procedure astext (srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
pls_numpts IN number,
pls_entity IN number,
points IN blob,
shptxt IN Out clob);

Procedure spatialrelations1 (relation IN number,
str_val IN varchar2,
s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
s2_srid IN number,
s2_false_x IN number,
s2_false_y IN number,
s2_xyunits IN number,
s2_false_z IN number,
s2_zunits IN number,
s2_false_m IN number,
s2_munits IN number,
s2_proj_str IN varchar2,
s2_numpts IN number,
s2_entity IN number,
s2_points IN blob,
has_relation IN Out number);

Procedure spatialrelations2 (relation IN number,
str_val IN varchar2,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
s2_numpts IN number,
s2_entity IN number,
s2_points IN blob,
has_relation IN Out number);

Procedure asbinary (srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
Type IN number,
numpts IN number,
points IN blob,
wkb_blob IN Out blob);

Procedure geomfromshape (Function IN number,
shp_blob IN blob,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
numpts IN Out number,
entity IN Out number,
minx IN Out number,
miny IN Out number,
maxx IN Out number,
maxy IN Out number,
minz IN Out number,
maxz IN Out number,
minm IN Out number,
maxm IN Out number,
area IN Out number,
len IN Out number,
points IN Out blob);

Procedure getshape (shp_entity IN number,
shp_numpts IN number,
shp_blob IN blob,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
numpts IN Out number);

Procedure geom_operation (operation IN number,
in_value1 IN number,
in_value2 IN number,
in_value3 IN number,
s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
s2_numpts IN Out number,
s2_entity IN Out number,
s2_minx IN Out number,
s2_miny IN Out number,
s2_maxx IN Out number,
s2_maxy IN Out number,
s2_minz IN Out number,
s2_maxz IN Out number,
s2_minm IN Out number,
s2_maxm IN Out number,
s2_area IN Out number,
s2_len IN Out number,
s2_points IN Out blob);

Procedure coorddim (s1_points IN blob,
typeval IN Out number);

Procedure envelope (s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
s2_numpts IN Out number,
s2_entity IN Out number,
s2_minx IN Out number,
s2_miny IN Out number,
s2_maxx IN Out number,
s2_maxy IN Out number,
s2_minz IN Out number,
s2_maxz IN Out number,
s2_minm IN Out number,
s2_maxm IN Out number,
s2_area IN Out number,
s2_len IN Out number,
s2_points IN Out blob);

Procedure getdimtype (s1_points IN blob,
typeval IN Out number);

Procedure isclosed (s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
isring IN number,
value IN Out number);

Procedure issimple (s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
value IN Out number);

Procedure spatial_operations1 (operation IN number,
s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
s2_srid IN number,
s2_false_x IN number,
s2_false_y IN number,
s2_xyunits IN number,
s2_false_z IN number,
s2_zunits IN number,
s2_false_m IN number,
s2_munits IN number,
s2_proj_str IN varchar2,
s2_numpts IN number,
s2_entity IN number,
s2_points IN blob,
s3_numpts IN Out number,
s3_entity IN Out number,
s3_minx IN Out number,
s3_miny IN Out number,
s3_maxx IN Out number,
s3_maxy IN Out number,
s3_minz IN Out number,
s3_maxz IN Out number,
s3_minm IN Out number,
s3_maxm IN Out number,
s3_area IN Out number,
s3_len IN Out number,
s3_points IN Out blob);

Procedure spatial_operations2 (operation IN number,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
s2_numpts IN number,
s2_entity IN number,
s2_points IN blob,
s3_numpts IN Out number,
s3_entity IN Out number,
s3_minx IN Out number,
s3_miny IN Out number,
s3_maxx IN Out number,
s3_maxy IN Out number,
s3_minz IN Out number,
s3_maxz IN Out number,
s3_minm IN Out number,
s3_maxm IN Out number,
s3_area IN Out number,
s3_len IN Out number,
s3_points IN Out blob);

Procedure getnumvalue (operation IN number,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
value IN Out number);

Procedure transform (geotranid IN number,
s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_minx IN number,
s1_miny IN number,
s1_maxx IN number,
s1_maxy IN number,
s1_minz IN number,
s1_maxz IN number,
s1_minm IN number,
s1_maxm IN number,
s1_area IN number,
s1_len IN number,
s1_points IN blob,
s2_srid IN number,
s2_false_x IN number,
s2_false_y IN number,
s2_xyunits IN number,
s2_false_z IN number,
s2_zunits IN number,
s2_false_m IN number,
s2_munits IN number,
s2_proj_str IN varchar2,
s2_numpts IN Out number,
s2_entity IN Out number,
s2_minx IN Out number,
s2_miny IN Out number,
s2_maxx IN Out number,
s2_maxy IN Out number,
s2_minz IN Out number,
s2_maxz IN Out number,
s2_minm IN Out number,
s2_maxm IN Out number,
s2_area IN Out number,
s2_len IN Out number,
s2_points IN Out blob);

Procedure getfeature (s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
s2_numpts IN Out number,
s2_entity IN Out number,
s2_numparts IN Out number,
s2_parts IN Out SDE.int_array_tab,
s2_num_subparts IN Out number,
s2_subparts IN Out SDE.int_array_tab,
s2_properties IN Out number,
s2_x IN Out SDE.flt_array_tab,
s2_y IN Out SDE.flt_array_tab,
s2_z IN Out SDE.flt_array_tab,
s2_m IN Out SDE.flt_array_tab);

Procedure gen_cell_arrays (s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_minx IN number,
s1_miny IN number,
s1_maxx IN number,
s1_maxy IN number,
s1_points IN blob,
operation IN number,
distance IN number,
grid IN number,
grid2 IN number,
grid3 IN number,
num_parent_cell IN Out number,
parent_cell_t IN Out SDE.int_array_tab,
num_tess_cell IN Out number,
tess_cell_t IN Out SDE.int_array_tab,
grid1_new IN Out number,
grid2_new IN OUT number,
grid3_new IN OUT number);

Procedure test_features (operation IN number,
s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_minx IN number,
s1_miny IN number,
s1_maxx IN number,
s1_maxy IN number,
s1_points IN blob,
distance IN number,
bnd_rids_cnt IN number,
entity IN SDE.int_array_tab,
numpts IN SDE.int_array_tab,
srid IN SDE.int_array_tab,
points IN SDE.blob_array_tab,
row_id IN SDE.bnd_rowid_tab,
rid_array IN Out SDE.bnd_rowid_tab,
rid_array_cnt IN Out number);

Procedure test_features2 (operation IN number,
s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s2_srid IN number,
s2_false_x IN number,
s2_false_y IN number,
s2_xyunits IN number,
s2_false_z IN number,
s2_zunits IN number,
s2_false_m IN number,
s2_munits IN number,
s2_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_minx IN number,
s1_miny IN number,
s1_maxx IN number,
s1_maxy IN number,
s1_points IN blob,
distance IN number,
bnd_rids_cnt IN number,
entity IN SDE.int_array_tab,
numpts IN SDE.int_array_tab,
srid IN SDE.int_array_tab,
points IN SDE.blob_array_tab,
row_id IN SDE.bnd_rowid_tab,
rid_array IN Out SDE.bnd_rowid_tab,
rid_array_cnt IN Out number);

Procedure verify (s1_srid IN number,
s1_false_x IN number,
s1_false_y IN number,
s1_xyunits IN number,
s1_false_z IN number,
s1_zunits IN number,
s1_false_m IN number,
s1_munits IN number,
s1_proj_str IN varchar2,
s1_numpts IN number,
s1_entity IN number,
s1_points IN blob,
s2_numpts IN Out number,
s2_entity IN Out number,
s2_minx IN Out number,
s2_miny IN Out number,
s2_maxx IN Out number,
s2_maxy IN Out number,
s2_minz IN Out number,
s2_maxz IN Out number,
s2_minm IN Out number,
s2_maxm IN Out number,
s2_area IN Out number,
s2_len IN Out number,
s2_points IN Out blob);

Procedure generate_ellipse (center_x IN number,
center_y IN number,
center_z IN number,
center_m IN number,
semiMajorAxis IN number,
semiMinorAxis IN number,
angle IN number,
numpts IN number,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
s2_numpts IN Out number,
s2_entity IN Out number,
s2_minx IN Out number,
s2_miny IN Out number,
s2_maxx IN Out number,
s2_maxy IN Out number,
s2_minz IN Out number,
s2_maxz IN Out number,
s2_minm IN Out number,
s2_maxm IN Out number,
s2_area IN Out number,
s2_len IN Out number,
s2_points IN Out blob);

Procedure generate_circle (center_x IN number,
center_y IN number,
center_z IN number,
center_m IN number,
radius IN number,
numpts IN number,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
s2_numpts IN Out number,
s2_entity IN Out number,
s2_minx IN Out number,
s2_miny IN Out number,
s2_maxx IN Out number,
s2_maxy IN Out number,
s2_minz IN Out number,
s2_maxz IN Out number,
s2_minm IN Out number,
s2_maxm IN Out number,
s2_area IN Out number,
s2_len IN Out number,
s2_points IN Out blob);

Procedure generate_wedge (center_x IN number,
center_y IN number,
center_z IN number,
center_m IN number,
startAngle IN number,
endAngle IN number,
outerRadius IN number,
innerRadius IN number,
numpts IN number,
srid IN number,
false_x IN number,
false_y IN number,
xyunits IN number,
false_z IN number,
zunits IN number,
false_m IN number,
munits IN number,
proj_str IN varchar2,
s2_numpts IN Out number,
s2_entity IN Out number,
s2_minx IN Out number,
s2_miny IN Out number,
s2_maxx IN Out number,
s2_maxy IN Out number,
s2_minz IN Out number,
s2_maxz IN Out number,
s2_minm IN Out number,
s2_maxm IN Out number,
s2_area IN Out number,
s2_len IN Out number,
s2_points IN Out blob);

Procedure sdexml_to_text (xml IN blob,
text_clob IN Out clob);

End st_geometry_shapelib_pkg;


SDE.ST_GEOMETRY_OPERATORS
+
create or replace Package st_geometry_operators Authid current_user
/***********************************************************************
*
*n {st_Geometry_Operators.sps} -- st_Geometry operators.
*
*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*
*p purpose:
* this pl/sql package specification defines operators
* to support the st_Geometry type.
*e
*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*
*x legalese:
*
* copyright 1992-2004 esri
*
* trade secrets: esri proprietary and confidential
* unpublished material - all rights reserved under the
* copyright laws of the united states.
*
* for additional information, contact:
* environmental systems research institute, inc.
* attn: contracts dept
* 380 new york street
* redlands, california, usa 92373
*
* email: contracts@esri.com
*
*e
*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*
*h history:
*
* kevin watt 12/02/04 original coding.
*e
***********************************************************************/
IS

c_package_release Constant pls_integer := 1123;

mtrue Constant pls_integer := 1;
mfalse Constant pls_integer := 0;

-- st_Geometry operator functions (isocomn.h st_Geometry_Operators enum)

geomfromshape Constant pls_integer := 1;
pointfromshape Constant pls_integer := 2;
linefromshape Constant pls_integer := 3;
polyfromshape Constant pls_integer := 4;
mpointfromshape Constant pls_integer := 5;
mlinefromshape Constant pls_integer := 6;
mpolyfromshape Constant pls_integer := 7;
st_geomfromwkb Constant pls_integer := 8;
st_pointfromwkb Constant pls_integer := 9;
st_linefromwkb Constant pls_integer := 10;
st_polyfromwkb Constant pls_integer := 11;
st_mpointfromwkb Constant pls_integer := 12;
st_mlinefromwkb Constant pls_integer := 13;
st_mpolyfromwkb Constant pls_integer := 14;
st_boundary Constant pls_integer := 15;
st_buffer Constant pls_integer := 16;
st_centroid Constant pls_integer := 17;
st_convexhull Constant pls_integer := 18;
st_startpoint Constant pls_integer := 19;
st_endpoint Constant pls_integer := 20;
st_linestringn Constant pls_integer := 21;
st_pointonsurface Constant pls_integer := 22;
st_exteriorring Constant pls_integer := 23;
st_interiorringn Constant pls_integer := 24;
st_numinteriorring Constant pls_integer := 25;
st_numgeometries Constant pls_integer := 26;
st_geometryn Constant pls_integer := 27;
st_difference Constant pls_integer := 28;
st_union Constant pls_integer := 29;
st_symmetricdiff Constant pls_integer := 30;
st_pointn Constant pls_integer := 31;
st_intersection Constant pls_integer := 32;
st_transform Constant pls_integer := 33;
st_verify Constant pls_integer := 34;

Function st_astext_f(prim SDE.st_geometry)
Return clob deterministic;

Function st_asbinary_f(prim SDE.st_geometry)
Return blob deterministic;

Function st_geomfromwkb_f(wkb_blob blob,srid number)
Return SDE.st_geometry deterministic;

Function st_pointfromwkb_f(wkb_blob blob,srid number)
Return SDE.st_geometry deterministic;

Function st_linefromwkb_f(wkb_blob blob,srid number)
Return SDE.st_geometry deterministic;

Function st_polyfromwkb_f(wkb_blob blob,srid number)
Return SDE.st_geometry deterministic;

Function st_mpointfromwkb_f(wkb_blob blob,srid number)
Return SDE.st_geometry deterministic;

Function st_mlinefromwkb_f(wkb_blob blob,srid number)
Return SDE.st_geometry deterministic;

Function st_mpolyfromwkb_f(wkb_blob blob,srid number)
Return SDE.st_geometry deterministic;

Function st_boundary_f(prim SDE.st_geometry)
Return SDE.st_geometry deterministic;

Function st_coorddim_f(prim SDE.st_geometry)
Return number deterministic;

Function st_envelope_f(prim SDE.st_geometry)
Return SDE.st_polygon deterministic;

Function st_geometrytype_f(prim SDE.st_geometry)
Return varchar2 deterministic;

Function st_is3d_f(prim SDE.st_geometry)
Return number deterministic;

Function st_ismeasured_f(prim SDE.st_geometry)
Return number deterministic;

Function st_isclosed_f(prim SDE.st_geometry)
Return number deterministic;

Function st_isempty_f(prim SDE.st_geometry)
Return number deterministic;

Function st_isring_f(prim SDE.st_geometry)
Return number deterministic;

Function st_issimple_f (prim SDE.st_geometry)
Return number deterministic;

Function st_area_f(prim SDE.st_geometry)
Return number deterministic;

Function st_areaunits_f(prim SDE.st_geometry,unit varchar2)
Return number deterministic;

Function st_buffer_f(prim SDE.st_geometry,distance number)
Return SDE.st_geometry deterministic;

Function st_centroid_f(prim SDE.st_geometry)
Return SDE.st_geometry deterministic;

Function st_convexhull_f(prim SDE.st_geometry)
Return SDE.st_geometry deterministic;

Function st_dimension_f(prim SDE.st_geometry)
Return number deterministic;

Function st_startpoint_f (prim SDE.st_geometry)
Return SDE.st_point deterministic;

Function st_endpoint_f (prim SDE.st_geometry)
Return SDE.st_point deterministic;

Function st_pointonsurface_f (prim SDE.st_geometry)
Return SDE.st_point deterministic;

Function st_exteriorring_f (prim SDE.st_geometry)
Return SDE.st_linestring deterministic;

Function st_interiorringn_f (prim SDE.st_geometry,ring_pos number)
Return SDE.st_linestring deterministic;

Function st_numinteriorring_f (prim SDE.st_geometry)
Return number deterministic;

Function st_numgeometries_f (prim SDE.st_geometry)
Return number deterministic;

Function st_geometryn_f (prim SDE.st_geometry,position number)
Return SDE.st_geometry;

Function st_difference_f(shape1 SDE.st_geometry,shape2 SDE.st_geometry)
Return SDE.st_geometry deterministic;

Function st_union_f (shape1 SDE.st_geometry,shape2 SDE.st_geometry)
Return SDE.st_geometry deterministic;

Function st_symmetricdiff_f (shape1 SDE.st_geometry,shape2 SDE.st_geometry)
Return SDE.st_geometry deterministic;

Function st_pointn_f (prim SDE.st_geometry,point_pos number)
Return SDE.st_point deterministic;

Function st_intersection_f (shape1 SDE.st_geometry,shape2 SDE.st_geometry)
Return SDE.st_geometry deterministic;

Function st_transform_f(prim SDE.st_geometry,srid number)
Return SDE.st_geometry deterministic;

Function st_transform_geotranid_f(prim SDE.st_geometry,srid number,geotranid number)
Return SDE.st_geometry deterministic;

Function st_entity_f (prim SDE.st_geometry)
Return number;

Function st_numpoints_f (prim SDE.st_geometry)
Return number;

Function st_minx_f (prim SDE.st_geometry)
Return number;

Function st_maxx_f (prim SDE.st_geometry)
Return number;

Function st_miny_f (prim SDE.st_geometry)
Return number;

Function st_maxy_f (prim SDE.st_geometry)
Return number;

Function st_minz_f (prim SDE.st_geometry)
Return number;

Function st_maxz_f (prim SDE.st_geometry)
Return number;

Function st_minm_f (prim SDE.st_geometry)
Return number;

Function st_maxm_f (prim SDE.st_geometry)
Return number;

Function st_length_f (prim SDE.st_geometry)
Return number;

Function st_srid_f (prim SDE.st_geometry)
Return number;

Function st_x_f (prim SDE.st_geometry)
Return number deterministic;

Function st_y_f (prim SDE.st_geometry)
Return number deterministic;

Function st_z_f (prim SDE.st_geometry)
Return number deterministic;

Function st_m_f (prim SDE.st_geometry)
Return number deterministic;

Function st_distance_f(shape1 SDE.st_geometry,shape2 SDE.st_geometry)
Return number deterministic;

Function st_distance_f(shape1 SDE.st_geometry,shape2 SDE.st_geometry,unit varchar2)
Return number deterministic;

Function st_disjoint_f(shape1 SDE.st_geometry,shape2 SDE.st_geometry)
Return number deterministic;

Procedure transform_srch_shape (shape IN SDE.st_geometry,
shape_out OUT SDE.st_geometry,
from_srid IN SDE.st_spref_util.srid_t,
to_srid IN SDE.st_spref_util.srid_t);

Function st_verify_f (shape SDE.st_geometry)
Return SDE.st_geometry deterministic;

Pragma Restrict_References (st_geometry_operators,wnds);

End st_geometry_operators;




Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
st_shapelib.dll от ArcGIS 10 с крайним сервис-паком, какой нашел (кажется, sp5) - версия 10.0.5.2063 от 22.05.2012



Буду рад любым гипотезам!


Когда все способы испробованы, а результата все нет, - прочтите наконец инструкцию!
Ответ: Куда-то исчезла функция исправления своих сообщений. Хотел поправить название темы, но не могу.


В общем, проблема звучит несколько по-другому.
OCILobLocator тут не причем.

Просто любой вызов SDE.ST_GeomFromWKB через OCI приводит к ошибке. Из анонимного sql-блока вызывается без проблем.

Попробовал следующую комбинацию:
в таблицу, где есть поле St_geometry, добавил еще поле BLOB;
через OCI одной командой записал в него данные;
второй командой через OCI попробовал сделать update поля St_geometry из поля BLOB через ST_GeomFromWKB.

UPDATE "SDE"."MYTABLE" SET "SHAPE" = SDE.ST_GeomFromWKB("SHAPE_BLOB", 3405) WHERE "ID"=1;


Получаю ту же ошибку.
ORA
ORA-03001: unimplemented feature
ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 237
ORA-06512: at "SDE.ST_GEOMETRY_OPERATORS", line 162


Что говорит о том, что происходит где-то сбой на этапе вызова внешней хранимой процедуры geomfromshape() из библиотеки "st_shapelib.dll" (см. SDE.ST_GEOMETRY_SHAPELIB_PKG).


Тот же самый UPDATE, но выполненный из SQL Developer-а, отрабатывает хорошо.

Другие хранимые процедуры из библиотеки "st_shapelib.dll" вызываются без проблем, в том числе и через OCI.

Всё выполняется от имени одного и того же пользователя, то есть права тут не причем.

Вопрос: куда копать?
Почему одна и та же внешняя хранимка в plsql выполняется, а через oci - нет?
Вопрос: Проблема при вызываний хранимой процедуры SQL через 1С8.2

Добрый день!
Возникла проблема при вызове хранимой процедуры из системы 1С8.2:
Тело процедуры:

USE Base
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[i_delete_debt]
AS
TRUNCATE TABLE tblOutletDebtsDetails
TRUNCATE TABLE tblOutletDebts
EXEC RecordLog 'i_delete_debt: удалены все долги'

Код 1С:

текстКоманды = "EXEC i_delete_debt";
команда.commandtext = текстКоманды;
попытка
Набор = команда.execute();
Исключение
НовСтрока = тз.Добавить();
НовСтрока.Ошибка = "При очистке долгов: Произошла ошибка при старте: " + ОписаниеОшибки() +
". Команда: " + ТекстКоманды;
КонецПопытки;


Проблема:
1с выполняя данный отчет зависает, то есть уходит в "аут"
после выполнения строчки
Набор = команда.execute();
не выдавая никаких ошибок(даже по окончаний 2-часов).
Смотрел трассировщиком, трассировщик пишет
что скрипт EXEC i_delete_debt выполнен.
Все.

Как пытался решить:
Ставил базу sql на другой сервер,
Ставил сервер приложений 1с на другой сервер.
Менял тело процедуры на:
USE Base
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[i_delete_debt]
AS
select 1

+ другие методы.
все выполнялось под полными правами SA.
Как решить такую проблему ?
В чем может быть причина?
Ответ:
dayren
Проблема:
1с выполняя данный отчет зависает, то есть уходит в "аут"
после выполнения строчки
Набор = команда.execute();
не выдавая никаких ошибок(даже по окончаний 2-часов).
Смотрел трассировщиком, трассировщик пишет
что скрипт EXEC i_delete_debt выполнен.


Скуль сделал, что ему предписано (ничего возвращать не должен).

1С ждет, что он ей что-нибудь вернёт.
Вопрос: проблемы TransferText acExportDelim в WIN7

доброе утро. у меня возникла проблема с созданием файла в WINDOWS 7 при выполнение команды :
DoCmd.TransferText acExportDelim, "", "Save TXT", "d:\ACCESS\Oplata.txt", False, ""

где "Save TXT" имя запроса, который выполняется без проблем. в win xp файл экспортируется в папку как положено.
я уже и полный доступ давал и пробовал на другие диски экспортировать файл и отключать UAC - результат 0.
может кто подскажет как решить проблему или предложит альтернативный вариант экспорта файла в win 7.
Ответ: olang, ну вот и ладушки...
Видимо у вас используется On Error Resume Next (здесь или в вызывающей процедуре), потому - молча.
А вообще, надежнее - использовать спецификацию. Вот вы на своем компе проблему побороли, а запустите БД на другом - получите те же грабли.