Oracle - SQLite dönüştürme
SQL Developer'ın Database Export aracının veya SQLcl'in tabloları ve Insert ifadeleriyle yazdığı .sql dosyasını bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir SQLite betiği indirin. SQLite'in olduğu gibi tutamadığı her değer ve taşımadığı her nesne raporda listelenir.
18 satır dönüştürüldü, düzeltme yok, reddedilen yok
shop_2024_oracle.sql içindeki tablolarOracle dökümü · SQL Developer ile yazıldı · utf-8
customers8 satır
7 sütun 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 satır
9 sütun 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;
Düzeltmeler
Düzeltilecek bir şey yoktu.
Kontrol edilmeli
- 1 sequence oluşturulmadı; SQLite içinde sequence yoktur. Uygulamanız ihtiyaç duyuyorsa sonraki değeri bir tabloda tutun.
- orders tablosundaki "invoice" sütununun varsayılan değeri SQLite için yazılamıyor (a sequence); bu yüzden sütunun varsayılan değeri yok. Yeni satırlar gerektiriyorsa varsayılan değeri elle ekleyin.
Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.
Diğer örnekler:
Oracle ile SQLite arasında neler değişir
Her satır, dönüştürücünün uyguladığı bir kuraldır; yanında, kural verilerinizde bir şeyi değiştirdiğinde yazılan rapor satırı yer alır.
BOOLEAN (23ai)
CHECK ile 0 veya 1 INTEGER
SQLite'ta boolean sütun yoktur, bu yüzden TRUE ve FALSE 1 ve 0 olur.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG
TEXT
Oracle ister bayt ister karakter saymış olsun, uzunluklar karakter sayar; böylece her değer sığar.
NUMBER, NUMBER(p,s), FLOAT(b)
INTEGER veya 15 basamaktan sonra metin olarak tam korunan NUMERIC
NUMBER her basamağı korur; duyarlığı olmayan ve tüm değerleri en fazla 18 basamaklı tam sayı olan bir NUMBER 64 bitlik tam sayı olur ve negatif bir ölçek ondalık noktadan önce o kadar basamak tutar.
Rapor satırı: decimal_as_text
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND
Oracle'ın metniyle TEXT, örneğin +01-06
SQLite'ta interval türü yoktur; metin her parçayı korur.
Rapor satırı: type_replaced
DATE, TIMESTAMP(p)
her basamağı korunan ISO 8601 metni olarak DATETIME
Oracle'ın DATE türü saniyesine kadar bir saat tutar, yani bir tarih ve saattir. Amerikan veya Alman oturumundaki bir dışa aktarım tarihleri saatleri ve yüzyılları olmadan (DD-MON-RR) yazar; bunları korumak için ISO oturumunda (SYYYY-MM-DD HH24:MI:SS) dışa aktarın.
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE
UTC'de ISO 8601 metni olarak TIMESTAMP
SQLite'ta farkı koruyan bir tür yoktur, bu yüzden her an UTC'de yazılır: farkı ne olursa olsun an aynıdır.
Rapor satırı: moments_as_utc
JSON (21c), and CLOB holding JSON
TEXT
Aynı JSON değerleri; dışa aktarımın 'null' olarak yazdığı bir SQL NULL, NULL olarak kalır.
BLOB, RAW(n), LONG RAW
BLOB
Baytlar bayt olarak kalır.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRY
TEXT
Oracle'ın kendi türlerinin karşılığı yoktur; değerleri, ROWID değerleri dahil, metinlerini korur, ancak Oracle dışında bir anlam taşımazlar.
Rapor satırı: type_replaced
collations that ignore case (BINARY_CI)
tam karşılaştırma
SQLite, aksi belirtilmedikçe metni tam karşılaştırır ve NOCASE yalnızca ASCII harflerini dönüştürür.
Rapor satırı: case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assigns
en yüksek id'den sonra devam eden INTEGER PRIMARY KEY AUTOINCREMENT
Kopyalanan id'ler olduğu gibi yüklenir ve sayaç en yüksek id'den sonra devam eder. Bir tetikleyicinin bir sequence'tan doldurduğu sütun (12c öncesi yöntem) da kimlik sütunu olur.
identity columns the target can't count
sayaçsız INTEGER
SQLite yalnızca birincil anahtarın tamamı olan bir sütunu sayar, bu yüzden sütun değerlerini korur ve yeni satırlara değer verilmesi gerekir.
Rapor satırı: counter_dropped
CREATE SEQUENCE
oluşturulmaz
Dışa aktarım, bir sequence'ın ulaştığı değeri START WITH olarak yazar; böylece oradan devam eder.
Rapor satırı: sequence_not_converted
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)
GENERATED ALWAYS AS, PERSISTED ise STORED, değilse VIRTUAL
SQLite bunları aynı formülden hesaplar; dışa aktarımın onlar için yazdığı değerler dışarıda bırakılır.
virtual columns with functions IntoSQL doesn't write, and the || operator
düz bir sütun
SQLite için yazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; dışa aktarımın sanal sütunlar için yazdığı değerler dışarıda bırakılır ve SQLite bunları hesaplayamaz.
Rapor satırı: generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)
varsayılan değer yok
Yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.
Rapor satırı: default_not_translated
CHECK constraints
çevrilir
Aynı CHECK kısıtları, her satır yüklenirken denetlenir.
CHECK constraints with functions IntoSQL doesn't write
oluşturulmaz
Yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.
Rapor satırı: check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATE
oluşturulmaz
Oracle bu CHECK kısıtlarını zaten var olan satırlara uygulamaz, bu yüzden satırlar onları ihlal edebilir.
Rapor satırı: check_not_enforced
function-based, bitmap and domain indexes
oluşturulmaz
IntoSQL tüm sütunlar üzerinde b-tree indeksler yazar; diğerlerini yüklemeden sonra yeniden oluşturun.
Rapor satırı: index_skipped
foreign keys
CREATE TABLE içinde, denetlenmeden yüklenir, ardından PRAGMA foreign_key_check ile listelenir
SQLite yabancı anahtarları yalnızca CREATE TABLE içinde kabul eder ve yalnızca PRAGMA foreign_keys açıkken denetler. Satırlar denetlenmeden yüklenir ve betik, üst satırı olmayan her satırı listeleyerek biter.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones
oluşturulmaz
Bir anahtar, var olmayan bir tabloya başvuramaz ve Oracle'ın denetlemediği bir anahtarın üst satırı olmayan satırları olabilir.
Rapor satırı: foreign_key_skipped
partitioned tables
her bölümün satırlarını içeren tek tablo
Satırlar aynıdır; gerekirse tabloyu SQLite'ta yeniden bölümleyin.
Rapor satırı: partitions_dropped
several schemas in one export
tek dosya, tabloların adı önce şemalarının adıyla başlar
Bir SQLite dosyası tek bir veritabanıdır, bu yüzden şema adı aynı adlı tabloları birbirinden ayırır; tek şemalık bir dışa aktarım tablolarının adlarını korur.
Rapor satırı: schemas_merged
NOT NULL columns with values that become NULL
NOT NULL kaldırılır
Değerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.
Rapor satırı: not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggers
raporda listelenir
Kodları PL/SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.
Rapor satırı: not_converted_objects
exports without CREATE TABLE (data only)
değerlerden okunan türler
Yalnızca veri içeren bir dışa aktarımda yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.
Rapor satırı: no_schema
expressions in INSERT values other than the ones exports write
NULL
Veritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz; dışa aktarımların yazdığı to_date, to_timestamp, TO_CLOB, HEXTORAW ve diğerleri okunur.
Rapor satırı: expression_value
types IntoSQL doesn't know, and object types
TEXT
Metin her değeri tutar; yüklemeden sonra türü değiştirin.
Rapor satırı: unknown_type
dates before year 1 and time zones given as region names
NULL
Tarih olmayan bir değer NULL olur ve rapor onu sayar.
Rapor satırı: date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE
Infinity 9e999 olarak; NaN NULL olarak
SQLite 9e999'u sonsuzluk olarak geri okur ve NaN desteklemez.
NUL characters in text
korunur
SQLite'ın metni NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.
text that isn't valid in its encoding
hatalı baytlar yerine koyma karakteri olarak
Betik UTF-8'dir ve her değer geçerli metin olmalıdır.
Rapor satırı: invalid_utf8_replaced
text decoded twice (ñ)
olduğu gibi kopyalanır
Betik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.
Rapor satırı: mojibake_suspected
| Oracle içinde | SQLite içinde | Rapor satırı |
|---|---|---|
| BOOLEAN (23ai) | CHECK ile 0 veya 1 INTEGERSQLite'ta boolean sütun yoktur, bu yüzden TRUE ve FALSE 1 ve 0 olur. | |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | TEXTOracle ister bayt ister karakter saymış olsun, uzunluklar karakter sayar; böylece her değer sığar. | |
| NUMBER, NUMBER(p,s), FLOAT(b) | INTEGER veya 15 basamaktan sonra metin olarak tam korunan NUMERICNUMBER her basamağı korur; duyarlığı olmayan ve tüm değerleri en fazla 18 basamaklı tam sayı olan bir NUMBER 64 bitlik tam sayı olur ve negatif bir ölçek ondalık noktadan önce o kadar basamak tutar. | decimal_as_text |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | Oracle'ın metniyle TEXT, örneğin +01-06SQLite'ta interval türü yoktur; metin her parçayı korur. | type_replaced |
| DATE, TIMESTAMP(p) | her basamağı korunan ISO 8601 metni olarak DATETIMEOracle'ın DATE türü saniyesine kadar bir saat tutar, yani bir tarih ve saattir. Amerikan veya Alman oturumundaki bir dışa aktarım tarihleri saatleri ve yüzyılları olmadan (DD-MON-RR) yazar; bunları korumak için ISO oturumunda (SYYYY-MM-DD HH24:MI:SS) dışa aktarın. | |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | UTC'de ISO 8601 metni olarak TIMESTAMPSQLite'ta farkı koruyan bir tür yoktur, bu yüzden her an UTC'de yazılır: farkı ne olursa olsun an aynıdır. | moments_as_utc |
| JSON (21c), and CLOB holding JSON | TEXTAynı JSON değerleri; dışa aktarımın 'null' olarak yazdığı bir SQL NULL, NULL olarak kalır. | |
| BLOB, RAW(n), LONG RAW | BLOBBaytlar bayt olarak kalır. | |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | TEXTOracle'ın kendi türlerinin karşılığı yoktur; değerleri, ROWID değerleri dahil, metinlerini korur, ancak Oracle dışında bir anlam taşımazlar. | type_replaced |
| collations that ignore case (BINARY_CI) | tam karşılaştırmaSQLite, aksi belirtilmedikçe metni tam karşılaştırır ve NOCASE yalnızca ASCII harflerini dönüştürür. | case_insensitive_collation |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | en yüksek id'den sonra devam eden INTEGER PRIMARY KEY AUTOINCREMENTKopyalanan id'ler olduğu gibi yüklenir ve sayaç en yüksek id'den sonra devam eder. Bir tetikleyicinin bir sequence'tan doldurduğu sütun (12c öncesi yöntem) da kimlik sütunu olur. | |
| identity columns the target can't count | sayaçsız INTEGERSQLite yalnızca birincil anahtarın tamamı olan bir sütunu sayar, bu yüzden sütun değerlerini korur ve yeni satırlara değer verilmesi gerekir. | counter_dropped |
| CREATE SEQUENCE | oluşturulmazDışa aktarım, bir sequence'ın ulaştığı değeri START WITH olarak yazar; böylece oradan devam eder. | sequence_not_converted |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | GENERATED ALWAYS AS, PERSISTED ise STORED, değilse VIRTUALSQLite bunları aynı formülden hesaplar; dışa aktarımın onlar için yazdığı değerler dışarıda bırakılır. | |
| virtual columns with functions IntoSQL doesn't write, and the || operator | düz bir sütunSQLite için yazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; dışa aktarımın sanal sütunlar için yazdığı değerler dışarıda bırakılır ve SQLite bunları hesaplayamaz. | generated_not_translated |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | varsayılan değer yokYazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır. | default_not_translated |
| CHECK constraints | çevrilirAynı CHECK kısıtları, her satır yüklenirken denetlenir. | |
| CHECK constraints with functions IntoSQL doesn't write | oluşturulmazYazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır. | check_skipped |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | oluşturulmazOracle bu CHECK kısıtlarını zaten var olan satırlara uygulamaz, bu yüzden satırlar onları ihlal edebilir. | check_not_enforced |
| function-based, bitmap and domain indexes | oluşturulmazIntoSQL tüm sütunlar üzerinde b-tree indeksler yazar; diğerlerini yüklemeden sonra yeniden oluşturun. | index_skipped |
| foreign keys | CREATE TABLE içinde, denetlenmeden yüklenir, ardından PRAGMA foreign_key_check ile listelenirSQLite yabancı anahtarları yalnızca CREATE TABLE içinde kabul eder ve yalnızca PRAGMA foreign_keys açıkken denetler. Satırlar denetlenmeden yüklenir ve betik, üst satırı olmayan her satırı listeleyerek biter. | |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | oluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz ve Oracle'ın denetlemediği bir anahtarın üst satırı olmayan satırları olabilir. | foreign_key_skipped |
| partitioned tables | her bölümün satırlarını içeren tek tabloSatırlar aynıdır; gerekirse tabloyu SQLite'ta yeniden bölümleyin. | partitions_dropped |
| several schemas in one export | tek dosya, tabloların adı önce şemalarının adıyla başlarBir SQLite dosyası tek bir veritabanıdır, bu yüzden şema adı aynı adlı tabloları birbirinden ayırır; tek şemalık bir dışa aktarım tablolarının adlarını korur. | schemas_merged |
| NOT NULL columns with values that become NULL | NOT NULL kaldırılırDeğerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur. | not_null_relaxed |
| views, synonyms, types, packages, procedures, functions and other triggers | raporda listelenirKodları PL/SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler. | not_converted_objects |
| exports without CREATE TABLE (data only) | değerlerden okunan türlerYalnızca veri içeren bir dışa aktarımda yalnızca satırlar vardır, bu yüzden türler değerlerden gelir. | no_schema |
| expressions in INSERT values other than the ones exports write | NULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz; dışa aktarımların yazdığı to_date, to_timestamp, TO_CLOB, HEXTORAW ve diğerleri okunur. | expression_value |
| types IntoSQL doesn't know, and object types | TEXTMetin her değeri tutar; yüklemeden sonra türü değiştirin. | unknown_type |
| dates before year 1 and time zones given as region names | NULLTarih olmayan bir değer NULL olur ve rapor onu sayar. | date_out_of_range |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | Infinity 9e999 olarak; NaN NULL olarakSQLite 9e999'u sonsuzluk olarak geri okur ve NaN desteklemez. | |
| NUL characters in text | korunurSQLite'ın metni NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır. | |
| text that isn't valid in its encoding | hatalı baytlar yerine koyma karakteri olarakBetik UTF-8'dir ve her değer geçerli metin olmalıdır. | invalid_utf8_replaced |
| text decoded twice (ñ) | olduğu gibi kopyalanırBetik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir. | mojibake_suspected |
Betiği SQLite veritabanına yükleyin
Betik tabloları oluşturur, satırları kopyalar, ardından anahtarları, indeksleri ve yabancı anahtarları ekler; böylece hızlı yüklenir ve ilk hatada durur.
sqlite3 -bail mydb.sqlite < oracle.sqlite.sqlYabancı anahtarlar her tabloda tanımlanır ve satırlar yabancı anahtar denetimleri kapalıyken yüklenir. Betik ardından, yarı yolda başarısız olmak yerine, var olmayan bir satıra işaret eden her satırı listeler.
Büyük bir döküm için yerel bir diskte yeni bir dosyaya yükleyin. Betik her şeyi senkronizasyon kapalı tek bir işlemde yükler; böylece disk hızında çalışır ve yarı yolda duran bir yükleme yarım tablo bırakmaz.
Komut satırı dosyayı doğrudan bir SQLite veritabanına yükler; betik yazmanız gerekmez. Ücretsizdir.
En iyi sonuç için Oracle dökümü nasıl alınır
Dönüştürücü, dökümün içerdiğini okur. Bu seçenekler verilerinizin daha fazlasını dökümde tutar:
- SQL Developer'da DDL ve Insert veri biçimiyle Tools, Database Export'u seçin. SQLcl aynısını SET SQLFORMAT INSERT ile yazar.
- Dışa aktarmadan önce ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' çalıştırın: varsayılan biçim tarihleri saatleri ve yüzyılları olmadan yazar.
- exp veya expdp ile alınan bir .dmp dosyası ikilidir: dosyayı bir Oracle veritabanına, örneğin Docker'daki Oracle Database Free'ye içe aktarın ve SQL Developer ile dışa aktarın.
Neler dönüştürülmez
Görünümler, paketler, saklı yordamlar, fonksiyonlar, tetikleyiciler, türler ve eş anlamlılar PL/SQL ile yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları SQLite için yeniden yazabilirsiniz.
Oracle - SQLite dönüştürme hakkında sorular
Yanıtınızı bulamadınız mı? İletişim sayfasından bize yazın, bir kişi yanıt verir. İletişim sayfası
Dökümüm yükleniyor mu?
Hayır. Dönüştürücü tarayıcınızda çalışır ve dökümü diskinizden parça parça okur; böylece döküm bilgisayarınızdan hiç çıkmaz. Masaüstü uygulaması ve komut satırı da bilgisayarınızda dönüştürür.
Döküm ne kadar büyük olabilir?
Dönüştürücü dökümün tamamını asla bellekte tutmaz: dosyayı aralıklar halinde iki kez okur ve betiği ilerledikçe yazar. Birkaç gigabaytlık dökümler tarayıcıda, masaüstü uygulamasında ve komut satırıyla dönüştürülür.
exp veya expdp ile alınan bir .dmp dosyasını dönüştürebilir miyim?
Doğrudan değil: Data Pump ve özgün Export, yalnızca Oracle'ın okuyabildiği ikili bir biçim yazar. Dosyayı herhangi bir Oracle veritabanına içe aktarın (Oracle Database Free Docker'da çalışır) ve SQL Developer'ın Database Export aracıyla veya SQLcl ile dışa aktarın. Dönüştürücü bir .dmp dosyası aldığında bunu söyler.
Dışa aktarım hangi Oracle sürümlerinden gelebilir?
Oracle 11g ve sonrasından, DBMS_METADATA tablo tanımlarıyla SQL Developer ve SQLcl dışa aktarımları. Her test dışa aktarımı Amerikan, Alman ve ISO oturumlarında Oracle 21c ve 23ai'den gelir ve kaynağıyla hücre hücre karşılaştırılır.
NUMBER, DATE ve diğer Oracle türleri ne olur?
NUMBER tam sayılar için INTEGER olur, diğer durumlarda her basamağı korur; DATE saatiyle DATETIME metni olur; CLOB TEXT, BLOB ve RAW BLOB olur. Infinity korunur; NaN NULL olur.
Kimlik sütunları ve sequence'lar korunuyor mu?
Tablonun birincil anahtarının tamamı olan bir kimlik sütunu INTEGER PRIMARY KEY AUTOINCREMENT olur ve en yüksek id'den sonra devam eder. SQLite içinde sequence yoktur, bu yüzden sequence'lar raporlanır.
PL/SQL paketleri, saklı yordamlar ve tetikleyiciler ne olur?
Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar.
Betik hangi SQLite sürümlerinde yüklenir?
SQLite 3.31 ve sonrası. Her test dışa aktarımı 3.31 ve 3.54 üzerinde yüklenir ve bir sorun çıkarsa ilk hatada durur.