Sql e lettura di un file per un batch

dentro un file tipo FOO.txt viene messo un nome

Dentro la procedura sql (temporizzata) dovrei aprire il file, leggere il valore (Ex _00102003) e passarlo come parametro per effettuare una select

""select * from tabella where id = "variabile letta dal txt"


Ora tutta sta roba, se fosse possibile con qualsiasi linguaggio , ci metterei instant, ma dato che non mastico SQL puro o T-Sql ...non so da dove partire.

Ho letto varie cose ed esempi, ma non devo creare funzioni o procedure, ma effettuare un solo SQL dove ogni volta prima devo aprire il file e leggere dentro sto benedetto file.

Denghiu.
Una cosa tipo questa...

CREATE OR REPLACE PROCEDURE PRO_READFILE AS
F utl_file.file_type;
S varchar2(200);
BEGIN

F := utl_file.fopen('c:\tmp','mytextfile.txt','R');
utl_file.get_line(F,S);
utl_file.fclose(F);
dbms_output.put_line(S);
EXCEPTION
WHEN utl_file.invalid_path THEN
raise_application_error(-20000, 'ERROR: path non valido, non autorizzato o non in INIT.ORA.');

END;
questo va..
exec master.dbo.xp_cmdshell 'type c:\sample.txt'

solo che mi dice accesso negato...
l'errore di permessi te lo da perchè devi xp_cmdshell è riservata: https://msdn.microsoft.com/en-us/library/ms190693.aspx?f=255&MSPPError=-2147217396

il processo di MSSQL deve avere i permessi almno in lettura sul file

prova così:

http://stackoverflow.com/questions/12502213/how-to-read-a-text-file-using-t-sql

CREATE TABLE #TEXTFILE_1(
FIELD1 varchar(100) ,
FIELD2 varchar(100) ,
FIELD3 varchar(100) ,
FIELD4 varchar(100));

BULK INSERT #TEXTFILE_1 FROM 'C:\FOO.TXT'
WITH (FIELDTERMINATOR =' | ',ROWTERMINATOR =' \n')

/*You now have your bulk data*/

insert into yourtable (field1, field2, field3, field4, field5, field6)
select txt.FIELD1, txt.FIELD2, txt.FIELD3, txt.FIELD4, 'something else1', 'something else2'
from #TEXTFILE_1 txt


/* tuo script || query */


drop table #TEXTFILE_1

se la tabella ti serve sempre puoi anche crearla permanente e fare un truncate alla fine dello script.

se hai bisogni di aiuto manda PM
in alternativa puoi usare OPENROWSET che è la soluzione più flessibile:

prova qualcosa tipo:

SELECT * FROM OPENROWSET(BULK 'c:\foo.txt', SINGLE_CLOB ) AS a

BulkColumn
-----------------------------------------------------------------------------------------------------------------------
Ex _00102003

(1 row(s) affected)



questa per me ha funzionato però prima devi eseguire queste:

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO


il difetto di CLOB è che se hai più linee nel txt lui le conta come un unico row, quindi occhio!





GRANDE !! ha funzionato alla prima botta
ottimo