Eu tenho uma tabela blobtable que possui uma coluna BLOB blobcol . Um usuário atualizou a tabela usando um comando semelhante a este:
UPDATE BLOBTABLE
SET BLOBCOL=BFILENAME('directory/subdirectory', 'filename.txt')
WHERE ROWID='ROWIDVALUE';
Observe que o arquivo filename.txt existia no diretório antes dessa atualização ser executada.
Agora, o usuário está dizendo que quando eles selecionam blobtable (usando o desenvolvedor PL/SQL), o blobcol contém "Erro de valor" para esta linha. Normalmente, blobcol contém o valor "BFILE". Por curiosidade, tentei selecionar o mesmo registro no SQL*Plus e obtive o seguinte valor para blobcol:
bfilename(diretório/subdiretório', 'filename.txt')
Não estou muito familiarizado com BLOBs e como eles funcionam, então minhas perguntas são:
- O usuário atualizou o blobcol corretamente?
- O que poderia causar o "Erro de valor" e como isso pode ser corrigido?
Não é assim que você carrega um
BLOB
campo.BFILENAME
retorna umBFILE
localizador eBFILE
os dados não são armazenados no banco de dados, mas em arquivos fora, mas acessíveis ao banco de dados.O comando acima nem teria sucesso se BLOBCOL fosse realmente do
BLOB
tipo, você receberia o erro abaixo:ORA-00932: inconsistent datatypes: expected BLOB got FILE
Outro erro é
BFILENAME
esperar o nome de um objeto de banco de dados de diretório, não um caminho de diretório no sistema de arquivos.Se você deseja atualizar um
BLOB
campo com o conteúdo de um arquivo, faça isso da seguinte maneira:Quanto ao que causou a
Value Error
mensagem, não sabemos a estrutura da sua tabela nem o método exato de como ela foi carregada, mas foi feito com um método inadequado, eu acho.Por fim, se o seu arquivo for realmente um arquivo de texto simples (apenas supondo por causa de
.txt
), você poderá armazená-lo em um arquivo emCLOB
vez deBLOB
.