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;
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...
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
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!
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