Oracle 9i har inte inbyggd funktionalitet för att direkt läsa filer från operativsystemets filsystem som du kan göra med Pythons "Open ()" -funktion eller liknande kommandon på andra språk. Du måste använda externa procedurer (vanligtvis skriven i PL/SQL -omslag runt andra språk som Java eller C) för att uppnå detta.
Det finns ingen enda "syntax" inom ren SQL eller PL/SQL i Oracle 9i för denna uppgift. Tillvägagångssättet involverar flera steg:
1. Externt förfarande: Du skapar en lagrad procedur (i PL/SQL) som kallar en extern procedur skriven på ett språk som Java eller C. Denna externa procedur kommer att hantera den faktiska filen I/O (öppna, läsa och stänga filen).
2. java eller C -kod: Den externa proceduren (t.ex. en Java -klass eller en C -funktion) kommer att använda lämpliga operativsystem API:er (som `fopen`,` FREAD ', `fclose` i C, eller Java's' FileInputTream 'och relaterade klasser) för att läsa innehållet i textfilen.
3. PL/SQL -omslag: PL/SQL -omslagsfunktionen kommer att ringa den externa proceduren, hantera eventuella fel och returnera filinnehållet som en sträng (eller kanske som en "clob" om filen är mycket stor).
Konceptuellt exempel (illustrativt - kräver betydande kodning):
Detta är en * skiss på hög nivå och representerar inte kompilerbar kod; Det beskriver bara konceptet:
`` `SQL
- PL/SQL-omslag
Skapa eller byt ut procedur get_file_contents (
p_filepath i varchar2,
p_file_contents ut clob
)
Extern procedur get_file_contents_java (p_filepath varchar2, p_file_contents clob); -Java-motsvarighet
BÖRJA
get_file_contents_java (p_filepath, p_file_contents);
UNDANTAG
När andra då
DBMS_OUTPUT.PUT_LINE ('Felläsningsfil:' || Sqlerrm);
AVSLUTA;
/
- Exempelanvändning (efter att ha sammanställt Java-koden och registrerat den hos Oracle)
FÖRKLARA
v_file_contents clob;
BÖRJA
get_file_contents ('/path/to/my/file.txt', v_file_contents);
Dbms_output.put_line (v_file_contents); - Skriv ut filinnehållet (trunkerat om det är mycket stort)
AVSLUTA;
/
`` `
Viktiga överväganden:
* java/c kod: Du måste skriva och kompilera den faktiska Java- eller C -koden som utför fil I/O. Den här koden måste då laddas in i Oracle -databasen med lämplig "LoadJava" (för Java) eller liknande kommandon.
* behörigheter: Oracle -databasanvändaren behöver lämpliga operativsystembehörigheter för att komma åt katalogen och filen.
* Säkerhet: Var extremt försiktig med att låta databasen komma åt godtyckliga filer på filsystemet på grund av betydande säkerhetsrisker. Begränsa åtkomst till specifika, pålitliga platser.
* Felhantering: Robust felhantering är avgörande i den externa proceduren och PL/SQL -omslaget för att hantera potentiella undantag (fil inte hittade, tillståndsproblem etc.).
* Stora filer: För mycket stora filer är det lämpligare att använda "clob" än "varchar2" för att undvika storleksbegränsningar.
På grund av komplexiteten är detta inte en trivial uppgift i Oracle 9i. Moderna databasversioner erbjuder ofta mer strömlinjeformade metoder (som UTL_FILE, även om även det har säkerhets- och tillståndsproblem), men Oracle 9i kräver detta mer involverade extern procedurmetod. Prioritera alltid säkerhet när du tillåter databasåtkomst till operativsystemets filer.