You are on page 1of 12

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ...

Page 1 of 12

Logistics Consulting Logistics & Technology Solutions TMS and WMS Experts suppportwww.tsolco.com
APRO E-Invoicing Proces of electronic invoices (Image in PDF, data file in XML)www.apro.nl
Load Testing Software Advanced load testing software. Free Trial. Download now!www.Paessler.com/load-testing/
FAQ

Procura

Membros

Registre-se

Perfil

MP's

Login/Out

FTP

glufke.net - ndice do Frum -> Forms

Mensagem

Autor
Deatho

Enviada: Qua, 29 Jun 2005 3:25 pmAssunto:FTP

Rank: Programador Snior

fala Pessoal e vai mais uma do meu caminho de dvidas a!!!


Registrado em: Qui, 16 de
Junho de 2005
Mensagens: 57
Cidade - UF: Assis

gostaria de saber se existem alguma forma de mandar um arquivo para o FTP..


se tiver algum exemplo passar pra nis a..

forte abrao...
t a prxima, que no ser muito demorada!!

OracleSkins.com - SSHR Brand Oracle Self-Service with custom look and feels (CLAFs)www.oracleskins.com
Maucallacta and Coropuna Visit & Explore the Inca Oracle in the highlands of Pampacolca Peruwww.maucallacta.com
Gupta/Centura Developers? Automatically conver to C#/VB.NET and find the developers you need!www.iceteagroup.com

_________________
-Jnior

dr_gori

Enviada: Qui, 30 Jun 2005 9:37 am

Moderador

Bem... Creio que a forma mais simples de voc enviar algo por FTP usar o
prprio comando FTP.
Tipo d um HOST no seu form que chama o comando FTP.
Algo assim:

Registrado em: Seg, 3 de


Mai de 2004
Mensagens: 3260
Cidade - UF: Porto Alegre RS

Zoccoli Advogados - Porto Alegre / RS


Cdigo:
host('ftp -s:envia.txt', NO_SCREEN);

O envia.txt fica mais ou menos assim:


Cdigo:

open
ftp.seu_ftp.com.br
seu_login
sua_senha
put
seu_arquivo_local
seu_arquivo_destino
close

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ... Page 2 of 12

bye

Existe tambm uma outra forma que eu nunca testei... Mas a vai pra quem quiser testar. claro, avisa a galera se funcionou!!!
Cdigo:
rem
rem
rem
rem
rem
rem

----------------------------------------------------------------------Filename:
ftpclient.sql
Purpose:
PL/SQL FTP Client
Date:
19-Nov-2003
Author:
Russ Johnson, Braun Consulting
-----------------------------------------------------------------------

CREATE OR REPLACE PACKAGE BRNC_FTP_PKG


AS
/**
*
*PL/SQLFTPClient
*
*Createdby:RussJohnson,BraunConsulting
*
*www.braunconsult.com
*
*OVERVIEW
*-------------------*This package uses the standard packages UTL_FILE and UTL_TCP to perform
*client-side FTP functionality (PUT and GET) for text files as defined in
*theWorldWideWebConsortium'sRFC959document- http://www.w3.org/Protocols/rfc959/
*Theproceduresandfunctionsinthispackageallowsingleormultiplefiletransferusing
*standardTCP/IPconnections.
*
*LIMITATIONS
*-------------------*CurrentlytheAPIislimitedtotransferofASCIItextfilesonly.Thisis
*primarilybecauseUTL_FILEonlysupportstextI/O,butalsobecausetheoriginal
*designwasforcreatingtextfilesfromdataintheOracledatabase,thentransferringthefileto
a remote host.
*Furthermore,theAPIdoesnotsupportSSH/SecureFTPorconnectionthroughaproxyserver.
*KeepinmindthatFTPpassestheusername/passwordcomboinplaintextoverTCP/IP.
*
*DBversions- 8i (8.1.x) and above. 8.0.x may work if it has the SYS.UTL_TCP package.
*
*
*Note:SinceUTL_FILEisusedfortheclient-side I/O, this package is also limited to
*transferoffilesthatexistindirectoriesavailabletoUTL_FILEforread/write.
*ThesedirectoriesaredefinedbytheUTL_FILE_DIRparameterintheinit.orafile.
*
*USAGE
*-------------------*ThreefunctionsareavailableforFTP- PUT, GET, and FTP_MULTIPLE. FTP_MULTIPLE takes
*atableofrecordsthatdefinethefilestobetransferred(filename,directory,etc.).
*Thattablecanhave1recordormultiplerecords.ThePUTandGETfunctionsareincluded
*forconveniencetoFTPonefileatatime.PUTandGETreturntrueifthefileistransferred
*successfullyandfalseifitfails.FTP_MULTIPLEreturnstrueifnobatch-level errors occur
*(suchasaninvalidhost,refusedconnection,orinvalidlogininformation).Italsotakesthe
*tableoffilerecordsINandpassesitbackOUT.Eachrecordcontainsindividualerror
information.
*
*EXAMPLE
*-------------------*Transfermultiplefiles- 1 GET and 2 PUT from a Windows machine to a host (assuming UNIX here).
*Displayanyerrorsthatoccur.
*DECLARE
*
*v_usernameVARCHAR2(40):='rjohnson';
*v_passwordVARCHAR2(40):='password';
*v_hostnameVARCHAR2(255):='ftp.oracle.com';
*v_error_messageVARCHAR2(1000);
*b_putBOOLEAN;
*t_filesBRNC_FTP_PKG.t_ftp_rec;-- Declare our table of file records
*
*BEGIN
*
*t_files(1).localpath:='d:\oracle\utl_file\outbound';
*t_files(1).filename:='myfile1.txt';
*t_files(1).remotepath:='/home/oracle/text_files';
*t_files(1).transfer_mode:='PUT';
*
*t_files(2).localpath:='d:\oracle\utl_file\inbound';
*t_files(2).filename:='incoming_file.xml';
*t_files(2).remotepath:='/home/oracle/xml_files';
*t_files(2).transfer_mode:='GET';
*
*t_files(3).localpath:='d:\oracle\utl_file\outbound';
*t_files(3).filename:='myfile2.txt';
*t_files(3).remotepath:='/home';
*t_files(3).transfer_mode:='PUT';
*
*b_put:=BRNC_FTP_PKG.FTP_MULTIPLE(v_error_message,
*t_files,
*v_username,
*v_password,
*v_hostname);
*IFb_put=TRUE
*THEN
*FORiINt_files.FIRST..t_files.LAST
*LOOP
*IFt_files.EXISTS(i)
*THEN

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ... Page 3 of 12

*DBMS_OUTPUT.PUT_LINE(t_files(i).status||'|'||
*t_files(i).error_message||'|'||
*to_char(t_files(i).bytes_transmitted)||'|'||
*to_char(t_files(i).trans_start,'YYYY-MM-DD HH:MI:SS')||' | '||
*to_char(t_files(i).trans_end,'YYYY-MM-DD HH:MI:SS'));
*ENDIF;
*ENDLOOP;
*ELSE
*DBMS_OUTPUT.PUT_LINE(v_error_message);
*ENDIF;
*
*EXCEPTION
*WHENOTHERS
*THEN
*DBMS_OUTPUT.PUT_LINE(SQLERRM);
*END;
*
*CREDITS
*-------------------*TheW3C'sRFC959thatdescribestheFTPprocess.
*
*http://www.w3c.org
*
*MuchofthePL/SQLcodeinthispackagewasbasedonJavacodewrittenby
*BruceBlackshawofEnterpriseDistributedTechnologiesLtd.Noneofthatcode
*wascopied,buttheobjectsandmethodsgreatlyhelpedmyunderstandingofthe
*FTPClientprocess.
*
*http://www.enterprisedt.com
*
*VERSIONHISTORY
*--------------------
*1.011/19/2002Unit-tested single and multiple transfers between disparate hosts.

*
*
*/

/**
*Exceptions
*
*/

ctrl_exceptionEXCEPTION;
data_exceptionEXCEPTION;
/**
*Constants- FTP valid response codes
*
*/
CONNECT_CODECONSTANTPLS_INTEGER:=220;
USER_CODECONSTANTPLS_INTEGER:=331;
LOGIN_CODECONSTANTPLS_INTEGER:=230;
PWD_CODECONSTANTPLS_INTEGER:=257;
PASV_CODECONSTANTPLS_INTEGER:=227;
CWD_CODECONSTANTPLS_INTEGER:=250;
TSFR_START_CODE1CONSTANTPLS_INTEGER:=125;
TSFR_START_CODE2CONSTANTPLS_INTEGER:=150;
TSFR_END_CODECONSTANTPLS_INTEGER:=226;
QUIT_CODECONSTANTPLS_INTEGER:=221;
SYST_CODECONSTANTPLS_INTEGER:=215;
TYPE_CODECONSTANTPLS_INTEGER:=200;
/**
*FTPFilerecorddatatype
*
*Elements:
*localpath- full directory name in which the local file resides or will reside
*Windows:'d:\oracle\utl_file'
*UNIX:'/home/oracle/utl_file'
*filename- filename and extension for the file to be received or sent
*changingthefilenameforthePUTorGETiscurrentlynotallowed
*Examples:'myfile.dat''myfile20021119.xml'
*remotepath- full directory name in which the local file will be sent or the
*remotefileexists.ShouldbeinUNIXformatregardlessofFTPserver'/one/two/three'
*filetype- reserved for future use, ignored in code
*transfer_mode- 'PUT' or 'GET'
*status- status of the transfer. 'ERROR' or 'SUCCESS'
*error_message- meaningful (hopefully) error message explaining the reason for failure
*bytes_transmitted- how many bytes were sent/received
*trans_start- date/time the transmission started
*trans_end- date/time the transmission ended
*
*/
TYPEr_ftp_recISRECORD(localpathVARCHAR2(255),
filenameVARCHAR2(255),
remotepathVARCHAR2(255),
filetypeVARCHAR2(20),
transfer_modeVARCHAR2(5),
statusVARCHAR2(40),
error_messageVARCHAR2(255),
bytes_transmittedNUMBER,
trans_startDATE,
trans_endDATE);
/**
*FTPFileTable- used to store many files for transfer
*

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ... Page 4 of 12

*/
TYPEt_ftp_recISTABLEofr_ftp_recINDEXBYBINARY_INTEGER;
/**
*InternalconvenienceprocedureforcreatingpassivehostIPaddress
*andportnumber.
*
*/

PROCEDURECREATE_PASV(p_pasv_cmdINVARCHAR2,
p_pasv_hostOUTVARCHAR2,
p_pasv_portOUTNUMBER);
/**
*FunctionusedtovalidateFTPserverresponsesbasedonthe
*codepassedinp_code.Readssingleormulti-line responses.
*
*/
FUNCTIONVALIDATE_REPLY(p_ctrl_conINOUTUTL_TCP.CONNECTION,
p_codeINPLS_INTEGER,
p_replyOUTVARCHAR2)
RETURNBOOLEAN;
/**
*FunctionusedtovalidateFTPserverresponsesbasedonthe
*codepassedinp_code.Readssingleormulti-line responses.
*Overloadedbecausesomeresponsescanhave2validcodes.
*
*/
FUNCTIONVALIDATE_REPLY(p_ctrl_conINOUTUTL_TCP.CONNECTION,
p_code1INPLS_INTEGER,
p_code2INPLS_INTEGER,
p_replyOUTVARCHAR2)
RETURNBOOLEAN;
/**
*Procedurethathandlestheactualdatatransfer.Meant
*forinternalpackageuse.Returnsinformationaboutthe
*actualtransfer.
*
*/
PROCEDURETRANSFER_ASCII(u_ctrl_conINOUTUTL_TCP.CONNECTION,
p_localpathINVARCHAR2,
p_filenameINVARCHAR2,
p_pasv_hostINVARCHAR2,
p_pasv_portINPLS_INTEGER,
p_transfer_modeINVARCHAR2,
v_statusOUTVARCHAR2,
v_error_messageOUTVARCHAR2,
n_bytes_transmittedOUTNUMBER,
d_trans_startOUTDATE,
d_trans_endOUTDATE);
/**
*FunctiontohandleFTPofmanyfiles.
*ReturnsTRUEifnobatch-level errors occur.
*ReturnsFALSEifabatch-level error occurs.
*
*Parameters:
*
*p_error_msg- error message for batch level errors
*p_files- BRNC_FTP_PKG.t_ftp_rec table type. Accepts
*listoffilestobetransferred(maybeanycombinationofPUTorGET)
*returnsthetableupdatedwithtransferstatus,errormessage,
*bytes_transmitted,transmissionstartdate/timeandtransmissionend
*date/time
*p_username- username for FTP server
*p_password- password for FTP server
*p_hostname- hostname or IP address of server Ex: 'ftp.oracle.com' or '127.0.0.1'
*p_port- port number to connect on. FTP is usually on 21, but this may be overridden
*iftheserverisconfigureddifferently.
*
*/
FUNCTIONFTP_MULTIPLE(p_error_msgOUTVARCHAR2,
p_filesINOUTt_ftp_rec,
p_usernameINVARCHAR2,
p_passwordINVARCHAR2,
p_hostnameINVARCHAR2,
p_portINPLS_INTEGERDEFAULT21)
RETURNBOOLEAN;
/**
*Conveniencefunctionforsingle-file PUT
*
*Parameters:
*p_localpath- full directory name in which the local file resides or will reside
*Windows:'d:\oracle\utl_file'
*UNIX:'/home/oracle/utl_file'
*p_filename- filename and extension for the file to be received or sent
*changingthefilenameforthePUTorGETiscurrentlynotallowed
*Examples:'myfile.dat''myfile20021119.xml'
*p_remotepath- full directory name in which the local file will be sent or the
*remotefileexists.ShouldbeinUNIXformatregardlessofFTPserver'/one/two/three'
*p_username- username for FTP server
*p_password- password for FTP server
*p_hostname- FTP server IP address or host name Ex: 'ftp.oracle.com' or '127.0.0.1'

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ... Page 5 of 12

*v_status- status of the transfer. 'ERROR' or 'SUCCESS'


*v_error_message- meaningful (hopefully) error message explaining the reason for failure
*n_bytes_transmitted- how many bytes were sent/received
*d_trans_start- date/time the transmission started
*d_trans_end- date/time the transmission ended
*p_port- port number to connect to, default is 21
*p_filetype- always set to 'ASCII', reserved for future use, ignored in code
*
*/
FUNCTIONPUT(p_localpathINVARCHAR2,
p_filenameINVARCHAR2,
p_remotepathINVARCHAR2,
p_usernameINVARCHAR2,
p_passwordINVARCHAR2,
p_hostnameINVARCHAR2,
v_statusOUTVARCHAR2,
v_error_messageOUTVARCHAR2,
n_bytes_transmittedOUTNUMBER,
d_trans_startOUTDATE,
d_trans_endOUTDATE,
p_portINPLS_INTEGERDEFAULT21,
p_filetypeINVARCHAR2:='ASCII')
RETURNBOOLEAN;
/**
*Conveniencefunctionforsingle-file GET
*
*Parameters:
*p_localpath- full directory name in which the local file resides or will reside
*Windows:'d:\oracle\utl_file'
*UNIX:'/home/oracle/utl_file'
*p_filename- filename and extension for the file to be received or sent
*changingthefilenameforthePUTorGETiscurrentlynotallowed
*Examples:'myfile.dat''myfile20021119.xml'
*p_remotepath- full directory name in which the local file will be sent or the
*remotefileexists.ShouldbeinUNIXformatregardlessofFTPserver'/one/two/three'
*p_username- username for FTP server
*p_password- password for FTP server
*p_hostname- FTP server IP address or host name Ex: 'ftp.oracle.com' or '127.0.0.1'
*v_status- status of the transfer. 'ERROR' or 'SUCCESS'
*v_error_message- meaningful (hopefully) error message explaining the reason for failure
*n_bytes_transmitted- how many bytes were sent/received
*d_trans_start- date/time the transmission started
*d_trans_end- date/time the transmission ended
*p_port- port number to connect to, default is 21
*p_filetype- always set to 'ASCII', reserved for future use, ignored in code
*
*/
FUNCTIONGET(p_localpathINVARCHAR2,
p_filenameINVARCHAR2,
p_remotepathINVARCHAR2,
p_usernameINVARCHAR2,
p_passwordINVARCHAR2,
p_hostnameINVARCHAR2,
v_statusOUTVARCHAR2,
v_error_messageOUTVARCHAR2,
n_bytes_transmittedOUTNUMBER,
d_trans_startOUTDATE,
d_trans_endOUTDATE,
p_portINPLS_INTEGERDEFAULT21,
p_filetypeINVARCHAR2:='ASCII')
RETURNBOOLEAN;
END BRNC_FTP_PKG;
/
CREATE OR REPLACE PACKAGE BODY BRNC_FTP_PKG
AS
/*****************************************************************************
**CreatethepassivehostIPandportnumbertoconnectto
**
*****************************************************************************/
PROCEDURECREATE_PASV(p_pasv_cmdINVARCHAR2,
p_pasv_hostOUTVARCHAR2,
p_pasv_portOUTNUMBER)
IS
v_pasv_cmdVARCHAR2(30):=p_pasv_cmd;--Host and port to connect to for data transfer
n_port_decNUMBER;
n_port_addNUMBER;

BEGIN
p_pasv_host:=REPLACE(SUBSTR(v_pasv_cmd,1,INSTR(v_pasv_cmd,',',1,4)-1),',','.');
n_port_dec:=TO_NUMBER(SUBSTR(v_pasv_cmd,INSTR(v_pasv_cmd,',',1,4)+1,(INSTR(v_pasv_cmd,',',1,5)-(INSTR
(v_pasv_cmd,',',1,4)+1))));
n_port_add:=TO_NUMBER(SUBSTR(v_pasv_cmd,INSTR(v_pasv_cmd,',',1,5)+1,LENGTH(v_pasv_cmd)-INSTR
(v_pasv_cmd,',',1,5)));
p_pasv_port:=(n_port_dec*256)+n_port_add;

EXCEPTION
WHENOTHERS
THEN
--DBMS_OUTPUT.PUT_LINE(SQLERRM);

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ... Page 6 of 12

RAISE;
ENDCREATE_PASV;
/*****************************************************************************
**Readasingleormulti-line reply from the FTP server and validate
**itagainstthecodepassedinp_code.
**
**ReturnTRUEifreplycodematchesp_code,FALSEifitdoesn'torerror
**occurs
**
**Sendfullserverresponsebacktocallingprocedure
*****************************************************************************/

FUNCTIONVALIDATE_REPLY(p_ctrl_conINOUTUTL_TCP.CONNECTION,
p_codeINPLS_INTEGER,
p_replyOUTVARCHAR2)
RETURNBOOLEAN
IS
n_codeVARCHAR2(3):=p_code;
n_byte_countPLS_INTEGER;
v_msgVARCHAR2(255);
n_line_countPLS_INTEGER:=0;
BEGIN
LOOP
v_msg:=UTL_TCP.GET_LINE(p_ctrl_con);
n_line_count:=n_line_count+1;
IFn_line_count=1
THEN
p_reply:=v_msg;
ELSE
p_reply:=p_reply||SUBSTR(v_msg,4);
ENDIF;
EXITWHENINSTR(v_msg,'-',1,1) <> 4;
ENDLOOP;
IFto_number(SUBSTR(p_reply,1,3))=n_code
THEN
RETURNTRUE;
ELSE
RETURNFALSE;
ENDIF;
EXCEPTION
WHENOTHERS
THEN
p_reply:=SQLERRM;
RETURNFALSE;
ENDVALIDATE_REPLY;
/*****************************************************************************
**Readsasingleormulti-line reply from the FTP server
**
**ReturnTRUEifreplycodematchesp_code1orp_code2,
**FALSEifitdoesn'torerroroccurs
**
**Sendfullserverresponsebacktocallingprocedure
*****************************************************************************/
FUNCTIONVALIDATE_REPLY(p_ctrl_conINOUTUTL_TCP.CONNECTION,
p_code1INPLS_INTEGER,
p_code2INPLS_INTEGER,
p_replyOUTVARCHAR2)
RETURNBOOLEAN
IS
v_code1VARCHAR2(3):=to_char(p_code1);
v_code2VARCHAR2(3):=to_char(p_code2);
v_msgVARCHAR2(255);
n_line_countPLS_INTEGER:=0;
BEGIN
LOOP
v_msg:=UTL_TCP.GET_LINE(p_ctrl_con);
n_line_count:=n_line_count+1;
IFn_line_count=1
THEN
p_reply:=v_msg;
ELSE
p_reply:=p_reply||SUBSTR(v_msg,4);
ENDIF;
EXITWHENINSTR(v_msg,'-',1,1) <> 4;
ENDLOOP;
IFto_number(SUBSTR(p_reply,1,3))IN(v_code1,v_code2)
THEN
RETURNTRUE;
ELSE
RETURNFALSE;
ENDIF;
EXCEPTION
WHENOTHERS
THEN
p_reply:=SQLERRM;
RETURNFALSE;
ENDVALIDATE_REPLY;
/*****************************************************************************
**Handlesactualdatatransfer.Respondswithstatus,errormessage,and
**transferstatistics.
**
**Potentialerrorscouldbewithconnectionorfilei/o
**
*****************************************************************************/
PROCEDURETRANSFER_ASCII(u_ctrl_conINOUTUTL_TCP.CONNECTION,
p_localpathINVARCHAR2,

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ... Page 7 of 12

p_filenameINVARCHAR2,
p_pasv_hostINVARCHAR2,
p_pasv_portINPLS_INTEGER,
p_transfer_modeINVARCHAR2,
v_statusOUTVARCHAR2,
v_error_messageOUTVARCHAR2,
n_bytes_transmittedOUTNUMBER,
d_trans_startOUTDATE,
d_trans_endOUTDATE)
IS
u_data_conUTL_TCP.CONNECTION;
u_filehandleUTL_FILE.FILE_TYPE;
v_tsfr_modeVARCHAR2(3):=p_transfer_mode;
v_modeVARCHAR2(1);
v_tsfr_cmdVARCHAR2(10);
v_bufferVARCHAR2(32767);
v_localpathVARCHAR2(255):=p_localpath;
v_filenameVARCHAR2(255):=p_filename;
v_hostVARCHAR2(20):=p_pasv_host;
n_portPLS_INTEGER:=p_pasv_port;
n_bytesNUMBER;
v_msgVARCHAR2(255);
v_replyVARCHAR2(1000);
v_err_statusVARCHAR2(20):='ERROR';

BEGIN
/**InitializesomeofourOUTvariables**/
v_status:='SUCCESS';
v_error_message:='';
n_bytes_transmitted:=0;
IFUPPER(v_tsfr_mode)='PUT'
THEN
v_mode:='r';
v_tsfr_cmd:='STOR';
ELSIFUPPER(v_tsfr_mode)='GET'
THEN
v_mode:='w';
v_tsfr_cmd:='RETR';
ENDIF;
/**OpendataconnectiononPassivehostandport**/
u_data_con:=UTL_TCP.OPEN_CONNECTION(v_host,n_port);
/**Openthelocalfiletoreadandtransferdata**/
u_filehandle:=UTL_FILE.FOPEN(v_localpath,v_filename,v_mode);
/**SendtheSTORcommandtotelltheserverwe'regoingtouploadafile**/
n_bytes:=UTL_TCP.WRITE_LINE(u_ctrl_con,v_tsfr_cmd||v_filename);
IFVALIDATE_REPLY(u_ctrl_con,TSFR_START_CODE1,TSFR_START_CODE2,v_reply)=FALSE
THEN
RAISEctrl_exception;
ENDIF;
d_trans_start:=SYSDATE;

IFUPPER(v_tsfr_mode)='PUT'
THEN
LOOP
BEGIN
UTL_FILE.GET_LINE(u_filehandle,v_buffer);
EXCEPTION
WHENNO_DATA_FOUND
THEN
EXIT;
END;
n_bytes:=UTL_TCP.WRITE_LINE(u_data_con,v_buffer);
n_bytes_transmitted:=n_bytes_transmitted+n_bytes;
ENDLOOP;
ELSIFUPPER(v_tsfr_mode)='GET'
THEN
LOOP
BEGIN
v_buffer:=UTL_TCP.GET_LINE(u_data_con,TRUE);
/**SometimestheTCP/IPbuffersendsnulldata**/
/**weonlywanttoreceivetheactualdata**/
IFv_bufferISNOTNULL
THEN
UTL_FILE.PUT_LINE(u_filehandle,v_buffer);
n_bytes:=LENGTH(v_buffer);
n_bytes_transmitted:=n_bytes_transmitted+n_bytes;
ENDIF;

EXCEPTION
WHENUTL_TCP.END_OF_INPUT
THEN
EXIT;
END;

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ... Page 8 of 12

ENDLOOP;

ENDIF;
/**Flushthebufferonthedataconnection**/
--UTL_TCP.FLUSH(u_data_con);
d_trans_end:=SYSDATE;
/**Closethefile**/
UTL_FILE.FCLOSE(u_filehandle);
/**ClosetheDataConnection**/
UTL_TCP.CLOSE_CONNECTION(u_data_con);
/**Verifythetransfersucceeded**/
IFVALIDATE_REPLY(u_ctrl_con,TSFR_END_CODE,v_reply)=FALSE
THEN
RAISEctrl_exception;
ENDIF;
EXCEPTION
WHENctrl_exception
THEN
v_status:=v_err_status;
v_error_message:=v_reply;
IFUTL_FILE.IS_OPEN(u_filehandle)
THEN
UTL_FILE.FCLOSE(u_filehandle);
ENDIF;
UTL_TCP.CLOSE_CONNECTION(u_data_con);
WHENUTL_FILE.invalid_path
THEN
v_status:=v_err_status;
v_error_message:='Directory'||v_localpath||'isnotavailabletoUTL_FILE.Checktheinit.orafile
for valid UTL_FILE directories.';
UTL_TCP.CLOSE_CONNECTION(u_data_con);
WHENUTL_FILE.invalid_operation
THEN
v_status:=v_err_status;
IFUPPER(v_tsfr_mode)='PUT'
THEN
v_error_message:='Thefile'||V_filename||'inthedirectory'||v_localpath||'couldnotbe
opened for reading.';
ELSIFUPPER(v_tsfr_mode)='GET'
THEN
v_error_message:='Thefile'||V_filename||'inthedirectory'||v_localpath||'couldnotbe
opened for writing.';
ENDIF;
IFUTL_FILE.IS_OPEN(u_filehandle)
THEN
UTL_FILE.FCLOSE(u_filehandle);
ENDIF;
UTL_TCP.CLOSE_CONNECTION(u_data_con);
WHENUTL_FILE.read_error
THEN
v_status:=v_err_status;
v_error_message:='Thesystemencounteredanerrorwhiletryingtoread'||v_filename||'inthe
directory '||v_localpath;
IFUTL_FILE.IS_OPEN(u_filehandle)
THEN
UTL_FILE.FCLOSE(u_filehandle);
ENDIF;
UTL_TCP.CLOSE_CONNECTION(u_data_con);
WHENUTL_FILE.write_error
THEN
v_status:=v_err_status;
v_error_message:='Thesystemencounteredanerrorwhiletryingtowriteto'||v_filename||'inthe
directory '||v_localpath;
IFUTL_FILE.IS_OPEN(u_filehandle)
THEN
UTL_FILE.FCLOSE(u_filehandle);
ENDIF;
UTL_TCP.CLOSE_CONNECTION(u_data_con);
WHENUTL_FILE.internal_error
THEN
v_status:=v_err_status;
v_error_message:='TheUTL_FILEpackageencounteredanunexpectedinternalsystemerror.';
IFUTL_FILE.IS_OPEN(u_filehandle)
THEN
UTL_FILE.FCLOSE(u_filehandle);
ENDIF;
UTL_TCP.CLOSE_CONNECTION(u_data_con);
WHENOTHERS
THEN

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports SQL ... Page 9 of 12

v_status:=v_err_status;
v_error_message:=SQLERRM;
IFUTL_FILE.IS_OPEN(u_filehandle)
THEN
UTL_FILE.FCLOSE(u_filehandle);
ENDIF;
UTL_TCP.CLOSE_CONNECTION(u_data_con);
ENDTRANSFER_ASCII;
/*****************************************************************************
**HandlesconnectiontohostandFTPofmultiplefiles
**FilescanbeanycombinationofPUTandGET
**
*****************************************************************************/
FUNCTIONFTP_MULTIPLE(p_error_msgOUTVARCHAR2,
p_filesINOUTt_ftp_rec,
p_usernameINVARCHAR2,
p_passwordINVARCHAR2,
p_hostnameINVARCHAR2,
p_portINPLS_INTEGERDEFAULT21)
RETURNBOOLEAN
IS
v_usernameVARCHAR2(30):=p_username;
v_passwordVARCHAR2(30):=p_password;
v_hostnameVARCHAR2(30):=p_hostname;
n_portPLS_INTEGER:=p_port;
u_ctrl_conUTL_TCP.CONNECTION;
n_byte_countPLS_INTEGER;
n_first_indexNUMBER;
v_msgVARCHAR2(250);
v_replyVARCHAR2(1000);
v_pasv_hostVARCHAR2(20);
n_pasv_portNUMBER;
invalid_transferEXCEPTION;
BEGIN
p_error_msg:='FTPSuccessful';--Assume the overall transfer will succeed
/**Attempttoconnecttothehostmachine**/
u_ctrl_con:=UTL_TCP.OPEN_CONNECTION(v_hostname,n_port);
IFVALIDATE_REPLY(u_ctrl_con,CONNECT_CODE,v_reply)=FALSE
THEN
RAISEctrl_exception;
ENDIF;
/**Sendusername**/
n_byte_count:=UTL_TCP.WRITE_LINE(u_ctrl_con,'USER'||v_username);
IFVALIDATE_REPLY(u_ctrl_con,USER_CODE,v_reply)=FALSE
THEN
RAISEctrl_exception;
ENDIF;

/**Sendpassword**/
n_byte_count:=UTL_TCP.WRITE_LINE(u_ctrl_con,'PASS'||v_password);
IFVALIDATE_REPLY(u_ctrl_con,LOGIN_CODE,v_reply)=FALSE
THEN
RAISEctrl_exception;
ENDIF;
/**Weshouldbeloggedin,timetotransferallfiles**/
FORiINp_files.FIRST..p_files.LAST
LOOP
IFp_files.EXISTS(i)
THEN
BEGIN
/**Changetotheremotepathdirectory**/
n_byte_count:=UTL_TCP.WRITE_LINE(u_ctrl_con,'CWD'||p_files(i).remotepath);
IFVALIDATE_REPLY(u_ctrl_con,CWD_CODE,v_reply)=FALSE
THEN
RAISEctrl_exception;
ENDIF;
/**SwitchtoIMAGEmode**/
n_byte_count:=UTL_TCP.WRITE_LINE(u_ctrl_con,'TYPEI');
IFVALIDATE_REPLY(u_ctrl_con,TYPE_CODE,v_reply)=FALSE
THEN
RAISEctrl_exception;
ENDIF;
/**GetaPassiveconnectiontousefordatatransfer**/

n_byte_count:=UTL_TCP.WRITE_LINE(u_ctrl_con,'PASV');
IFVALIDATE_REPLY(u_ctrl_con,PASV_CODE,v_reply)=FALSE
THEN
RAISEctrl_exception;
ENDIF;
CREATE_PASV(SUBSTR(v_reply,INSTR(v_reply,'(',1,1)+1,INSTR(v_reply,')',1,1)-INSTR
(v_reply,'(',1,1)-1),v_pasv_host,n_pasv_port);
/**TransferData**/
IFUPPER(p_files(i).transfer_mode)='PUT'

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports S...

Page 10 of 12

THEN
TRANSFER_ASCII(u_ctrl_con,
p_files(i).localpath,
p_files(i).filename,
v_pasv_host,
n_pasv_port,
p_files(i).transfer_mode,
p_files(i).status,
p_files(i).error_message,
p_files(i).bytes_transmitted,
p_files(i).trans_start,
p_files(i).trans_end);
ELSIFUPPER(p_files(i).transfer_mode)='GET'
THEN
TRANSFER_ASCII(u_ctrl_con,
p_files(i).localpath,
p_files(i).filename,
v_pasv_host,
n_pasv_port,
p_files(i).transfer_mode,
p_files(i).status,
p_files(i).error_message,
p_files(i).bytes_transmitted,
p_files(i).trans_start,
p_files(i).trans_end);
ELSE
RAISEinvalid_transfer;-- Raise an exception here
ENDIF;

EXCEPTION
WHENctrl_exception
THEN
p_files(i).status:='ERROR';
p_files(i).error_message:=v_reply;
WHENinvalid_transfer
THEN
p_files(i).status:='ERROR';
p_files(i).error_message:='Invalidtransfermethod.UsePUTorGET.';
END;
ENDIF;
ENDLOOP;
/**SendQUITcommand**/
n_byte_count:=UTL_TCP.WRITE_LINE(u_ctrl_con,'QUIT');
/**Don'tneedtovalidateQUIT,justclosetheconnection**/
UTL_TCP.CLOSE_CONNECTION(u_ctrl_con);
RETURNTRUE;
EXCEPTION
WHENctrl_exception
THEN
p_error_msg:=v_reply;
UTL_TCP.CLOSE_ALL_CONNECTIONS;
RETURNFALSE;
WHENOTHERS
THEN
p_error_msg:=SQLERRM;
UTL_TCP.CLOSE_ALL_CONNECTIONS;
RETURNFALSE;
ENDFTP_MULTIPLE;
/*****************************************************************************
**Conveniencefunctionforsingle-file PUT
**FormatsfileinformationforFTP_MULTIPLEfunctionandcallsit.
**
*****************************************************************************/
FUNCTIONPUT(p_localpathINVARCHAR2,
p_filenameINVARCHAR2,
p_remotepathINVARCHAR2,
p_usernameINVARCHAR2,
p_passwordINVARCHAR2,
p_hostnameINVARCHAR2,
v_statusOUTVARCHAR2,
v_error_messageOUTVARCHAR2,
n_bytes_transmittedOUTNUMBER,
d_trans_startOUTDATE,
d_trans_endOUTDATE,
p_portINPLS_INTEGERDEFAULT21,
p_filetypeINVARCHAR2:='ASCII')
RETURNBOOLEAN
IS
t_filest_ftp_rec;
v_usernameVARCHAR2(30):=p_username;
v_passwordVARCHAR2(50):=p_password;
v_hostnameVARCHAR2(100):=p_hostname;
n_portPLS_INTEGER:=p_port;
v_err_msgVARCHAR2(255);
b_ftpBOOLEAN;
BEGIN
t_files(1).localpath:=p_localpath;
t_files(1).filename:=p_filename;
t_files(1).remotepath:=p_remotepath;
t_files(1).filetype:=p_filetype;
t_files(1).transfer_mode:='PUT';
b_ftp:=FTP_MULTIPLE(v_err_msg,

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports S...

Page 11 of 12

t_files,
v_username,
v_password,
v_hostname,
n_port);
IFb_ftp=FALSE
THEN
v_status:='ERROR';
v_error_message:=v_err_msg;
RETURNFALSE;
ELSIFb_ftp=TRUE
THEN
v_status:=t_files(1).status;
v_error_message:=t_files(1).error_message;
n_bytes_transmitted:=t_files(1).bytes_transmitted;
d_trans_start:=t_files(1).trans_start;
d_trans_end:=t_files(1).trans_end;
RETURNTRUE;
ENDIF;
EXCEPTION
WHENOTHERS
THEN
v_status:='ERROR';
v_error_message:=SQLERRM;
RETURNFALSE;
--DBMS_OUTPUT.PUT_LINE(SQLERRM);
ENDPUT;
/*****************************************************************************
**Conveniencefunctionforsingle-file GET
**FormatsfileinformationforFTP_MULTIPLEfunctionandcallsit.
**
*****************************************************************************/
FUNCTIONGET(p_localpathINVARCHAR2,
p_filenameINVARCHAR2,
p_remotepathINVARCHAR2,
p_usernameINVARCHAR2,
p_passwordINVARCHAR2,
p_hostnameINVARCHAR2,
v_statusOUTVARCHAR2,
v_error_messageOUTVARCHAR2,
n_bytes_transmittedOUTNUMBER,
d_trans_startOUTDATE,
d_trans_endOUTDATE,
p_portINPLS_INTEGERDEFAULT21,
p_filetypeINVARCHAR2:='ASCII')
RETURNBOOLEAN
IS
t_filest_ftp_rec;
v_usernameVARCHAR2(30):=p_username;
v_passwordVARCHAR2(50):=p_password;
v_hostnameVARCHAR2(100):=p_hostname;
n_portPLS_INTEGER:=p_port;
v_err_msgVARCHAR2(255);
b_ftpBOOLEAN;
BEGIN
t_files(1).localpath:=p_localpath;
t_files(1).filename:=p_filename;
t_files(1).remotepath:=p_remotepath;
t_files(1).filetype:=p_filetype;
t_files(1).transfer_mode:='GET';
b_ftp:=FTP_MULTIPLE(v_err_msg,
t_files,
v_username,
v_password,
v_hostname,
n_port);
IFb_ftp=FALSE
THEN
v_status:='ERROR';
v_error_message:=v_err_msg;
RETURNFALSE;
ELSIFb_ftp=TRUE
THEN
v_status:=t_files(1).status;
v_error_message:=t_files(1).error_message;
n_bytes_transmitted:=t_files(1).bytes_transmitted;
d_trans_start:=t_files(1).trans_start;
d_trans_end:=t_files(1).trans_end;
RETURNTRUE;
ENDIF;
EXCEPTION
WHENOTHERS
THEN
v_status:='ERROR';
v_error_message:=SQLERRM;
RETURNFALSE;
--DBMS_OUTPUT.PUT_LINE(SQLERRM);
ENDGET;
END BRNC_FTP_PKG;
/

_________________
Thomas F. G. / NO GUOB TECHDAY!!!

Editado pela ltima vez por dr_gori em Qui, 30 Jun 2005 10:19 am, num total de 1 vez

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

FTP - Oracle Forms - glufke.net - Dicas truques boas prticas Oracle Forms Reports S...

Page 12 of 12

Deatho

Enviada: Qui, 30 Jun 2005 10:02 am

Rank: Programador Snior

cara***, que "cdigo"... hahahaha


valeu Dr...

Registrado em: Qui, 16 de


Junho de 2005
Mensagens: 57
Cidade - UF: Assis

_________________
-Jnior

Mostrar os tpicos anteriores: Todas as mensagens

glufke.net - ndice do Frum -> Forms

Antigas primeiro

Ir
Todos os horrios so GMT - 3 Hours

Pgina 1 de 1

..

http://glufke.net/oracle/viewtopic.php?t=461

19-Oct-10

You might also like