您必須選擇是否要從shell或PL/SQL維護這樣的文件。這兩種解決方案都是可能的,都是正確的
因爲Oracle必須從文件中讀寫,所以我會從數據庫端進行操作。
您可以使用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;
示例的源:http://psoug.org/snippet/Oracle-PL-SQL-UTL_FILE-file-write-to-file-example_538.htm
在您使用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')
);
在這一點上,你可以將數據寫入到你的表,該表具有與連接參數和值,即一列:「姓=喬恩
您可以通過甲骨文
才能閱讀由任何shell腳本閱讀它,因爲它是一個純文本。
然後,它只是一個查詢的事項,即:
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;
爲什麼不來構建構建文件在你的規格爲好,而不是依賴於純SQL一個新的shell腳本?另外,我認爲你需要指定你使用的是哪個數據庫,而不是一般的SQL標籤 –
建議你的DBMS是什麼非常有用。 – RandomSeed
感謝您的更新。注意我如何標記你的問題。您應該仔細標記問題,因爲大多數回答者只能通過標籤瀏覽問題。 – RandomSeed