Boa tarde,
Estou fazendo testes na procedure abaixo para incluir o conteúdo de um arquivo texto em uma tabela com campo tipo BLOB.
Se eu definir um directory apontando para uma pasta que esta no servidor a inclusão através da procedure abaixo funciona.
Agora como faço para passar para a procedure um arquivo que esta na minha máquina e não no servidor?
Banco 9i.
CREATE OR REPLACE Procedure Incluir_Arquivo
(
pCaminho IN VARCHAR2, — pasta que contém o arquivo
pId_Sub_Sistema IN NUMBER,
pDescricao IN VARCHAR2, — nome do arquivo texto
pData_Inicio IN DATE,
pData_Fim IN DATE,
pStatus IN CHAR,
pId_Funcionario IN Number
)
IS
out_blob blob;
blob_length integer;
v_contador integer;
in_file bfile := BFILENAME(pCaminho, pDescricao);
BEGIN
— Obtain the size of the blob file
DBMS_LOB.FILEOPEN(in_file, DBMS_LOB.FILE_READONLY);
blob_length:=DBMS_LOB.GETLENGTH(in_file);
DBMS_OUTPUT.PUT_LINE(‘File Size: ‘ || blob_length);
DBMS_LOB.FILECLOSE(in_file);
— Insert a new record into the table containing the
— filename you have specified and a LOB LOCATOR.
— Return the LOB LOCATOR and assign it to out_blob.
–teste
Insert into seid.arquivo
(arquivo_txt,
id_sub_sistema,
descricao,
data_inicio,
data_fim,
status,
alterado_por)
Values
(EMPTY_BLOB(),
pId_Sub_Sistema,
pDescricao,
pData_Inicio,
pData_Fim,
pStatus,
pId_Funcionario)
RETURNING arquivo_txt INTO out_blob;
— Load the image into the database as a BLOB
DBMS_LOB.OPEN(in_file, DBMS_LOB.LOB_READONLY);
DBMS_LOB.OPEN(out_blob, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(out_blob, in_file, blob_length);
— Close handles to blob and file
DBMS_LOB.CLOSE(out_blob);
DBMS_LOB.CLOSE(in_file);
commit;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,
‘An error was encountered – ‘ || SQLCODE ||’ -ERROR- ‘ || SQLERRM);
END Incluir_Arquivo;
Obrigado.
Airton