Konversi Oracle ke SQLite
Letakkan file .sql yang ditulis Database Export di SQL Developer atau SQLcl, dengan tabel dan pernyataan Insert-nya, lalu unduh skrip SQLite dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan SQLite apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.
18 baris dikonversi, tanpa perbaikan, tidak ada yang ditolak
Tabel di shop_2024_oracle.sqlDump Oracle · ditulis oleh SQL Developer · utf-8
customers8 baris
7 kolom id INTEGER not null name VARCHAR(100) not null email VARCHAR(150) not null country VARCHAR(2) not null is_active INTEGER not null signed_up DATETIME created_at DATETIME not null orders10 baris
9 kolom id INTEGER not null customer_id INTEGER not null invoice INTEGER status VARCHAR(10) not null total DECIMAL(10,2) not null items INTEGER not null ordered_at DATETIME not null shipped_at DATETIME note VARCHAR(255)
-- Written by IntoSQL from a Oracle dump. Load it with: sqlite3 -bail <database> < <file>
PRAGMA foreign_keys = OFF;
PRAGMA synchronous = OFF;
BEGIN;
CREATE TABLE customers ( -- People who bought at least once
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL,
country VARCHAR(2) DEFAULT 'US' NOT NULL,
is_active INTEGER DEFAULT 1 NOT NULL,
signed_up DATETIME,
created_at DATETIME DEFAULT (datetime('now', 'localtime')) NOT NULL,
CONSTRAINT customers_check1 CHECK (is_active IN (0, 1))
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
customer_id INTEGER NOT NULL,
invoice INTEGER,
status VARCHAR(10) DEFAULT 'pending' NOT NULL,
total DECIMAL(10,2) NOT NULL,
items INTEGER DEFAULT 1 NOT NULL,
ordered_at DATETIME NOT NULL,
shipped_at DATETIME,
note VARCHAR(255),
CONSTRAINT orders_check1 CHECK (status IN ('pending', 'paid', 'shipped', 'cancelled')),
CONSTRAINT orders_customer_fk FOREIGN KEY (customer_id) REFERENCES customers (id)
);
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15 00:00:00','2023-01-15 10:24:00.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03 00:00:00','2023-02-03 08:11:42.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(3,'José Peña','jose@example.es','ES',0,'2023-03-21 00:00:00','2023-03-21 19:05:17.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(4,'李雷','lilei@example.cn','CN',1,'2023-05-09 00:00:00','2023-05-09 02:40:00.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(5,'Noah O''Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02 00:00:00','2024-01-02 09:30:00.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29 00:00:00','2024-02-29 23:59:59.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12 00:00:00','2024-04-12 12:12:12.000000000');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(1,1,1000,'shipped',129.9,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL);
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(2,2,1001,'paid',54,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(3,1,1002,'cancelled',12.5,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(4,4,1003,'shipped',980,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(5,5,1004,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(6,6,1005,'shipped',310.4,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(7,8,1006,'paid',76.2,2,'2024-03-11 18:45:00',NULL,NULL);
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(8,2,1007,'paid',19.99,1,'2024-03-12 08:00:00',NULL,'Paid at the counter');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(9,3,1008,'shipped',64,2,'2024-03-14 15:30:00',NULL,'Shipping date never recorded');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(10,7,1009,'paid',1499,1,'2024-03-15 21:05:00',NULL,'C:\Users\ravi\invoice.pdf');
-- Indexes, triggers and counters, after the rows so each index builds once.
CREATE UNIQUE INDEX customers_customers_email_uk ON customers (email);
CREATE INDEX orders_orders_status_date_ix ON orders (status, ordered_at);
UPDATE sqlite_sequence SET seq = max(seq, 0) WHERE name = 'customers';
INSERT INTO sqlite_sequence (name, seq) SELECT 'customers', 0 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'customers');
UPDATE sqlite_sequence SET seq = max(seq, 0) WHERE name = 'orders';
INSERT INTO sqlite_sequence (name, seq) SELECT 'orders', 0 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'orders');
COMMIT;
-- Rows whose foreign key finds no parent, if any: the load doesn't stop for them.
PRAGMA foreign_key_check;
Perbaikan
Tidak ada yang perlu diperbaiki.
Perlu diperiksa
- 1 sequence tidak dibuat; SQLite tidak punya sequence. Simpan nilai berikutnya di sebuah tabel jika aplikasi Anda memerlukannya.
- Default "invoice" di orders tidak bisa ditulis untuk SQLite (a sequence), jadi kolom itu tanpa default. Tambahkan default secara manual jika baris baru memerlukannya.
File Anda dikonversi di komputer ini dan tidak pernah diunggah.
Contoh lain:
Yang berubah dari Oracle ke SQLite
Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.
BOOLEAN (23ai)
INTEGER 0 atau 1 dengan CHECK
SQLite tidak punya kolom boolean, jadi TRUE dan FALSE menjadi 1 dan 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG
TEXT
Panjang dihitung dalam karakter, baik Oracle menghitung byte maupun karakter, jadi setiap nilai muat.
NUMBER, NUMBER(p,s), FLOAT(b)
INTEGER, atau NUMERIC yang disimpan tepat sebagai teks di atas 15 digit
NUMBER mempertahankan setiap digit; NUMBER tanpa presisi yang semua nilainya bilangan bulat hingga 18 digit menjadi integer 64-bit, dan skala negatif memuat digit sebanyak itu sebelum titik desimal.
Baris laporan: decimal_as_text
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND
TEXT berisi teks Oracle, misalnya +01-06
SQLite tidak punya tipe interval; teksnya mempertahankan setiap bagian.
Baris laporan: type_replaced
DATE, TIMESTAMP(p)
DATETIME sebagai teks ISO 8601, setiap digit dipertahankan
DATE di Oracle memuat waktu hingga detik, jadi merupakan tanggal dan waktu. Ekspor dalam sesi Amerika atau Jerman menulis tanggal tanpa jam atau abadnya (DD-MON-RR); ekspor dalam sesi ISO (SYYYY-MM-DD HH24:MI:SS) agar keduanya tetap ada.
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE
TIMESTAMP sebagai teks ISO 8601 dalam UTC
SQLite tidak punya tipe yang menyimpan offset, jadi setiap momen ditulis dalam UTC: momen yang sama apa pun offset-nya.
Baris laporan: moments_as_utc
JSON (21c), and CLOB holding JSON
TEXT
Nilai JSON yang sama; NULL SQL yang ditulis ekspor sebagai 'null' tetap NULL.
BLOB, RAW(n), LONG RAW
BLOB
Byte tetap byte.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRY
TEXT
Tipe khusus Oracle tidak punya padanan; nilainya mempertahankan teksnya, termasuk nilai ROWID, meski tidak bermakna di luar Oracle.
Baris laporan: type_replaced
collations that ignore case (BINARY_CI)
perbandingan persis
SQLite membandingkan teks secara persis kecuali diminta lain, dan NOCASE-nya hanya berlaku untuk huruf ASCII.
Baris laporan: case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assigns
INTEGER PRIMARY KEY AUTOINCREMENT, berlanjut setelah id tertinggi
Id yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi. Kolom yang diisi trigger dari sequence (cara sebelum 12c) juga menjadi identity.
identity columns the target can't count
INTEGER tanpa penghitung
SQLite hanya menghitung kolom yang menjadi seluruh primary key, jadi kolom itu mempertahankan nilainya dan baris baru perlu mengisi nilainya sendiri.
Baris laporan: counter_dropped
CREATE SEQUENCE
tidak dibuat
Ekspor menulis posisi yang sudah dicapai sequence sebagai START WITH-nya, jadi sequence berlanjut dari sana.
Baris laporan: sequence_not_converted
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)
GENERATED ALWAYS AS, STORED jika PERSISTED, selain itu VIRTUAL
SQLite menghitungnya dari rumus yang sama; nilai yang ditulis ekspor untuknya tidak disertakan.
virtual columns with functions IntoSQL doesn't write, and the || operator
kolom biasa
Rumus yang tidak bisa ditulis untuk SQLite menyisakan kolom biasa dan satu baris laporan; nilai yang ditulis ekspor untuk kolom virtual tidak disertakan, dan SQLite tidak punya apa pun untuk dihitung.
Baris laporan: generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)
tanpa default
Default yang tidak bisa ditulis dihilangkan dan dilaporkan.
Baris laporan: default_not_translated
CHECK constraints
diterjemahkan
CHECK yang sama, diuji saat setiap baris dimuat.
CHECK constraints with functions IntoSQL doesn't write
tidak dibuat
CHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.
Baris laporan: check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATE
tidak dibuat
Oracle tidak menerapkan CHECK ini pada baris yang sudah ada, jadi baris bisa melanggarnya.
Baris laporan: check_not_enforced
function-based, bitmap and domain indexes
tidak dibuat
IntoSQL menulis indeks b-tree pada kolom utuh; buat ulang indeks lainnya setelah pemuatan.
Baris laporan: index_skipped
foreign keys
di CREATE TABLE, dimuat tanpa pemeriksaan, lalu dicantumkan oleh PRAGMA foreign_key_check
SQLite hanya menerima foreign key di CREATE TABLE dan hanya memeriksanya jika PRAGMA foreign_keys aktif. Baris dimuat tanpa diperiksa dan skrip diakhiri dengan daftar baris tanpa induk.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones
tidak dibuat
Key tidak bisa merujuk ke tabel yang tidak ada, dan key yang tidak diperiksa Oracle bisa punya baris tanpa induk.
Baris laporan: foreign_key_skipped
partitioned tables
satu tabel dengan baris dari setiap partisi
Barisnya sama; partisi ulang tabel di SQLite jika diperlukan.
Baris laporan: partitions_dropped
several schemas in one export
satu file, nama tabel diawali nama skemanya
Satu file SQLite adalah satu database, jadi nama schema membedakan tabel yang bernama sama; ekspor satu schema mempertahankan nama tabelnya.
Baris laporan: schemas_merged
NOT NULL columns with values that become NULL
NOT NULL dihapus
Kolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.
Baris laporan: not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggers
dicantumkan di laporan
Kodenya ditulis dalam PL/SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.
Baris laporan: not_converted_objects
exports without CREATE TABLE (data only)
tipe dibaca dari nilai
Ekspor yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.
Baris laporan: no_schema
expressions in INSERT values other than the ones exports write
NULL
Konverter yang tidak menjalankan database tidak bisa mengevaluasinya; to_date, to_timestamp, TO_CLOB, HEXTORAW, dan fungsi lain yang ditulis ekspor tetap dibaca.
Baris laporan: expression_value
types IntoSQL doesn't know, and object types
TEXT
Text memuat nilai apa pun; ubah tipenya setelah pemuatan.
Baris laporan: unknown_type
dates before year 1 and time zones given as region names
NULL
Nilai yang bukan tanggal menjadi NULL dan laporan menghitungnya.
Baris laporan: date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE
Infinity sebagai 9e999; NaN sebagai NULL
SQLite membaca kembali 9e999 sebagai infinity dan tidak punya NaN.
NUL characters in text
dipertahankan
Teks SQLite bisa memuat karakter NUL, jadi nilainya disalin apa adanya.
text that isn't valid in its encoding
byte yang rusak menjadi karakter pengganti
Skripnya UTF-8 dan setiap nilai harus berupa teks yang valid.
Baris laporan: invalid_utf8_replaced
text decoded twice (ñ)
disalin apa adanya
Skrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.
Baris laporan: mojibake_suspected
| Di Oracle | Di SQLite | Baris laporan |
|---|---|---|
| BOOLEAN (23ai) | INTEGER 0 atau 1 dengan CHECKSQLite tidak punya kolom boolean, jadi TRUE dan FALSE menjadi 1 dan 0. | |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | TEXTPanjang dihitung dalam karakter, baik Oracle menghitung byte maupun karakter, jadi setiap nilai muat. | |
| NUMBER, NUMBER(p,s), FLOAT(b) | INTEGER, atau NUMERIC yang disimpan tepat sebagai teks di atas 15 digitNUMBER mempertahankan setiap digit; NUMBER tanpa presisi yang semua nilainya bilangan bulat hingga 18 digit menjadi integer 64-bit, dan skala negatif memuat digit sebanyak itu sebelum titik desimal. | decimal_as_text |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | TEXT berisi teks Oracle, misalnya +01-06SQLite tidak punya tipe interval; teksnya mempertahankan setiap bagian. | type_replaced |
| DATE, TIMESTAMP(p) | DATETIME sebagai teks ISO 8601, setiap digit dipertahankanDATE di Oracle memuat waktu hingga detik, jadi merupakan tanggal dan waktu. Ekspor dalam sesi Amerika atau Jerman menulis tanggal tanpa jam atau abadnya (DD-MON-RR); ekspor dalam sesi ISO (SYYYY-MM-DD HH24:MI:SS) agar keduanya tetap ada. | |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP sebagai teks ISO 8601 dalam UTCSQLite tidak punya tipe yang menyimpan offset, jadi setiap momen ditulis dalam UTC: momen yang sama apa pun offset-nya. | moments_as_utc |
| JSON (21c), and CLOB holding JSON | TEXTNilai JSON yang sama; NULL SQL yang ditulis ekspor sebagai 'null' tetap NULL. | |
| BLOB, RAW(n), LONG RAW | BLOBByte tetap byte. | |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | TEXTTipe khusus Oracle tidak punya padanan; nilainya mempertahankan teksnya, termasuk nilai ROWID, meski tidak bermakna di luar Oracle. | type_replaced |
| collations that ignore case (BINARY_CI) | perbandingan persisSQLite membandingkan teks secara persis kecuali diminta lain, dan NOCASE-nya hanya berlaku untuk huruf ASCII. | case_insensitive_collation |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | INTEGER PRIMARY KEY AUTOINCREMENT, berlanjut setelah id tertinggiId yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi. Kolom yang diisi trigger dari sequence (cara sebelum 12c) juga menjadi identity. | |
| identity columns the target can't count | INTEGER tanpa penghitungSQLite hanya menghitung kolom yang menjadi seluruh primary key, jadi kolom itu mempertahankan nilainya dan baris baru perlu mengisi nilainya sendiri. | counter_dropped |
| CREATE SEQUENCE | tidak dibuatEkspor menulis posisi yang sudah dicapai sequence sebagai START WITH-nya, jadi sequence berlanjut dari sana. | sequence_not_converted |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | GENERATED ALWAYS AS, STORED jika PERSISTED, selain itu VIRTUALSQLite menghitungnya dari rumus yang sama; nilai yang ditulis ekspor untuknya tidak disertakan. | |
| virtual columns with functions IntoSQL doesn't write, and the || operator | kolom biasaRumus yang tidak bisa ditulis untuk SQLite menyisakan kolom biasa dan satu baris laporan; nilai yang ditulis ekspor untuk kolom virtual tidak disertakan, dan SQLite tidak punya apa pun untuk dihitung. | generated_not_translated |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | tanpa defaultDefault yang tidak bisa ditulis dihilangkan dan dilaporkan. | default_not_translated |
| CHECK constraints | diterjemahkanCHECK yang sama, diuji saat setiap baris dimuat. | |
| CHECK constraints with functions IntoSQL doesn't write | tidak dibuatCHECK yang tidak bisa ditulis dihilangkan dan dilaporkan. | check_skipped |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | tidak dibuatOracle tidak menerapkan CHECK ini pada baris yang sudah ada, jadi baris bisa melanggarnya. | check_not_enforced |
| function-based, bitmap and domain indexes | tidak dibuatIntoSQL menulis indeks b-tree pada kolom utuh; buat ulang indeks lainnya setelah pemuatan. | index_skipped |
| foreign keys | di CREATE TABLE, dimuat tanpa pemeriksaan, lalu dicantumkan oleh PRAGMA foreign_key_checkSQLite hanya menerima foreign key di CREATE TABLE dan hanya memeriksanya jika PRAGMA foreign_keys aktif. Baris dimuat tanpa diperiksa dan skrip diakhiri dengan daftar baris tanpa induk. | |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | tidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada, dan key yang tidak diperiksa Oracle bisa punya baris tanpa induk. | foreign_key_skipped |
| partitioned tables | satu tabel dengan baris dari setiap partisiBarisnya sama; partisi ulang tabel di SQLite jika diperlukan. | partitions_dropped |
| several schemas in one export | satu file, nama tabel diawali nama skemanyaSatu file SQLite adalah satu database, jadi nama schema membedakan tabel yang bernama sama; ekspor satu schema mempertahankan nama tabelnya. | schemas_merged |
| NOT NULL columns with values that become NULL | NOT NULL dihapusKolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti. | not_null_relaxed |
| views, synonyms, types, packages, procedures, functions and other triggers | dicantumkan di laporanKodenya ditulis dalam PL/SQL, jadi dicantumkan agar Anda bisa membuatnya ulang. | not_converted_objects |
| exports without CREATE TABLE (data only) | tipe dibaca dari nilaiEkspor yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai. | no_schema |
| expressions in INSERT values other than the ones exports write | NULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya; to_date, to_timestamp, TO_CLOB, HEXTORAW, dan fungsi lain yang ditulis ekspor tetap dibaca. | expression_value |
| types IntoSQL doesn't know, and object types | TEXTText memuat nilai apa pun; ubah tipenya setelah pemuatan. | unknown_type |
| dates before year 1 and time zones given as region names | NULLNilai yang bukan tanggal menjadi NULL dan laporan menghitungnya. | date_out_of_range |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | Infinity sebagai 9e999; NaN sebagai NULLSQLite membaca kembali 9e999 sebagai infinity dan tidak punya NaN. | |
| NUL characters in text | dipertahankanTeks SQLite bisa memuat karakter NUL, jadi nilainya disalin apa adanya. | |
| text that isn't valid in its encoding | byte yang rusak menjadi karakter penggantiSkripnya UTF-8 dan setiap nilai harus berupa teks yang valid. | invalid_utf8_replaced |
| text decoded twice (ñ) | disalin apa adanyaSkrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya. | mojibake_suspected |
Muat skrip ke SQLite
Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.
sqlite3 -bail mydb.sqlite < oracle.sqlite.sqlForeign key dideklarasikan di setiap tabel dan baris dimuat dengan pemeriksaan foreign key nonaktif. Lalu skrip mencantumkan setiap baris yang merujuk ke baris yang tidak ada, bukan gagal di tengah jalan.
Untuk dump yang besar, muat ke file baru di disk lokal. Skrip memuat semuanya dalam satu transaksi dengan sinkronisasi nonaktif, jadi berjalan secepat disk, dan pemuatan yang berhenti di tengah jalan tidak meninggalkan tabel setengah jadi.
Command line memuat file langsung ke database SQLite, tanpa menulis skrip. Gratis.
Buat dump Oracle untuk hasil terbaik
Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:
- Di SQL Developer, pilih Tools, Database Export, dengan DDL dan format data Insert. SQLcl menulis hal yang sama dengan SET SQLFORMAT INSERT.
- Jalankan ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' sebelum mengekspor: format default menulis tanggal tanpa jam atau abadnya.
- File .dmp dari exp atau expdp bersifat biner: impor ke database Oracle, misalnya Oracle Database Free di Docker, lalu ekspor dengan SQL Developer.
Yang tidak dikonversi
View, paket, prosedur, fungsi, trigger, tipe, dan sinonim ditulis dalam PL/SQL. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk SQLite.
Pertanyaan tentang Oracle ke SQLite
Tidak terjawab di sini? Tulis ke kami dari halaman kontak, dan seseorang akan membalas. Halaman kontak
Apakah dump saya diunggah?
Tidak. Konverter berjalan di browser Anda dan membaca dump dari disk Anda sepotong demi sepotong, jadi dump tidak pernah meninggalkan komputer Anda. Aplikasi desktop dan command line juga mengonversi di komputer Anda.
Seberapa besar dump yang bisa dipakai?
Konverter tidak pernah menyimpan seluruh dump di memori: file dibaca dua kali, per rentang, dan skrip ditulis sambil berjalan. Dump berukuran beberapa gigabyte bisa dikonversi di browser, di aplikasi desktop, dan dengan command line.
Bisakah saya mengonversi file .dmp dari exp atau expdp?
Tidak secara langsung: Data Pump dan Export versi asli menulis format biner yang hanya bisa dibaca Oracle. Impor ke database Oracle mana pun, Oracle Database Free berjalan di Docker, lalu ekspor dengan Database Export di SQL Developer atau SQLcl. Konverter memberi tahu hal ini saat menerima file .dmp.
Ekspor dari versi Oracle mana yang bisa dipakai?
Ekspor dari SQL Developer dan SQLcl, dengan definisi tabel dari DBMS_METADATA, dari Oracle 11g ke atas. Setiap ekspor uji berasal dari Oracle 21c dan 23ai, dalam sesi Amerika, Jerman, dan ISO, dan dibandingkan dengan sumbernya sel demi sel.
Apa yang terjadi pada NUMBER, DATE, dan tipe Oracle lainnya?
NUMBER menjadi INTEGER untuk bilangan bulat dan mempertahankan setiap digit untuk lainnya; DATE menjadi teks DATETIME dengan waktunya; CLOB menjadi TEXT, BLOB dan RAW menjadi BLOB. Infinity dipertahankan; NaN menjadi NULL.
Apakah kolom identity dan sequence dipertahankan?
Kolom identity yang menjadi seluruh primary key tabel menjadi INTEGER PRIMARY KEY AUTOINCREMENT dan berlanjut setelah id tertinggi. SQLite tidak punya sequence, jadi sequence dilaporkan.
Bagaimana dengan paket PL/SQL, prosedur, dan trigger?
Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri.
Di versi SQLite mana skrip bisa dimuat?
SQLite 3.31 dan yang lebih baru. Setiap ekspor uji dimuat di 3.31 dan 3.54, dan berhenti di galat pertama jika ada yang salah.