このようなファイルをシェルまたは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;
例のソース:あなたはOracleの外部表を使用してファイルから読み込むと同時にhttp://psoug.org/snippet/Oracle-PL-SQL-UTL_FILE-file-write-to-file-example_538.htm
。あなたが結合されたパラメータと値、すなわちを持つ一つの列を持っているあなたのテーブルにデータを書き込むことができます。この時点で、
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')
);
:「FIRSTNAMEは=ジョン」
あなたは
あなたができるOracle
でそれを読むことができますこれはプレーンテキストなので、どのシェルスクリプトでも読み込みます。
そして、それはすなわち、クエリするだけです。:
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に頼るよりも、同様にあなたの仕様の下にファイルを構築する新しいシェルスクリプトを構築していないなぜですか?また、一般的なSQLタグではなく、どのDBを使用しているのかを指定する必要があると思います。 –
DBMSが何であるかをアドバイスすることは非常に便利です。 – RandomSeed
更新いただきありがとうございます。あなたの質問にどのようにタグを付けたかを確認してください。ほとんどの回答者は質問だけをタグで参照するため、質問には慎重にタグを付ける必要があります。 – RandomSeed