Musisz wybrać, czy chcesz zachować taki plik z powłoki lub z PL/SQL. Oba rozwiązania są możliwe i oba są poprawne.
Ponieważ Oracle musi odczytać i zapisać z pliku, zrobiłbym to ze strony bazy danych.
Możesz zapisać dane do pliku używając pakietu UTL_FILE.
DECLARE
fileHandler UTL_FILE.FILE_TYPE;
BEGIN
fileHandler := UTL_FILE.FOPEN('test_dir', 'test_file.txt', 'W');
UTL_FILE.PUTF(fileHandler, 'firstname=Jon\n');
UTL_FILE.PUTF(fileHandler, 'lastname=Snow\n');
UTL_FILE.PUTF(fileHandler, 'occupation=Nights_Watch\n');
UTL_FILE.PUTF(fileHandler, 'family=Stark\n');
UTL_FILE.FCLOSE(fileHandler);
EXCEPTION
WHEN utl_file.invalid_path THEN
raise_application_error(-20000, 'ERROR: Invalid PATH FOR file.');
END;
przykład za źródło: http://psoug.org/snippet/Oracle-PL-SQL-UTL_FILE-file-write-to-file-example_538.htm
Jednocześnie można przeczytać z pliku przy użyciu zewnętrznego tabeli Oracle.
CREATE TABLE parameters_table
(
parameters_coupled VARCHAR2(4000)
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY test_dir
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE
FIELDS
(
parameters_coupled VARCHAR2(4000)
)
)
LOCATION ('test_file.txt')
);
W tym momencie można zapisać danych na stole, który ma jedną kolumnę z połączonego parametru i wartości, czyli: „Imię = Jon”
Można go odczytać przez Oracle
Można przeczytaj go za pomocą dowolnego skryptu powłoki, ponieważ jest to zwykły tekst.
Wtedy jest to tylko kwestia zapytaniu, tj .:
SELECT MAX(CASE WHEN INSTR(parameters_coupled, 'firstname=') = 1 THEN REPLACE(parameters_coupled, 'firstname=') ELSE NULL END) AS firstname
, MAX(CASE WHEN INSTR(parameters_coupled, 'lastname=') = 1 THEN REPLACE(parameters_coupled, 'lastname=') ELSE NULL END) AS lastname
, MAX(CASE WHEN INSTR(parameters_coupled, 'occupation=') = 1 THEN REPLACE(parameters_coupled, 'occupation=') ELSE NULL END) AS occupation
FROM parameters_table;
dlaczego nie zbudować nowy skrypt, który buduje plik pod specyfikacji, jak również, zamiast polegać na czystym SQL? Ponadto, myślę, że musisz określić, który DB używasz, a nie ogólny znacznik SQL. –
Byłoby bardzo przydatne, aby doradzić, co twój DBMS jest. – RandomSeed
Dziękujemy za aktualizację. Zwróć uwagę, jak oznaczono Twoje pytanie. Powinieneś ostrożnie oznaczyć swoje pytania, ponieważ większość osób odpowiadających na pytania przegląda pytania według tagów. – RandomSeed