Langsung ke konten
Beranda IntoSQL

Konversi MySQL ke Oracle

Letakkan dump dari mysqldump, mariadb-dump, mysqlpump, phpMyAdmin, atau Adminer, sebagai .sql atau .sql.gz, lalu unduh skrip Oracle dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan Oracle apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.

File Anda
sqlshop_2024.sqlFile contoh, 5,1 kB
Database Anda

18 baris dikonversi, 4 perbaikan, tidak ada yang ditolak

Tampilkan

Tabel di shop_2024.sqlDump MySQL 8.0.46 · ditulis oleh mysqldump · utf8mb4

  • customersditulis sebagai CUSTOMERS8 baris2
    7 kolom
    IDNUMBER(10) not null
    NAMEVARCHAR2(100 CHAR) not null
    EMAILVARCHAR2(150 CHAR) not null
    COUNTRYVARCHAR2(2 CHAR) not null
    IS_ACTIVENUMBER(1) not null
    SIGNED_UPDATE
    CREATED_ATTIMESTAMP(0) WITH TIME ZONE not null
  • ordersditulis sebagai ORDERS10 baris2
    9 kolom
    IDNUMBER(10) not null
    CUSTOMER_IDNUMBER(10) not null
    STATUSVARCHAR2(9 CHAR)
    TOTALNUMBER(10,2) not null
    ITEMSNUMBER(5) not null
    ORDERED_ATTIMESTAMP(0) not null
    SHIPPED_ATTIMESTAMP(0)
    NOTEVARCHAR2(255 CHAR)
    UPDATED_ATTIMESTAMP(0) WITH TIME ZONE not null
-- Written by IntoSQL from a MySQL dump. Load it with: NLS_LANG=.AL32UTF8 sqlplus -S -L <user>/<password>@<database> @<file>
WHENEVER SQLERROR EXIT FAILURE ROLLBACK;
SET DEFINE OFF;
SET SQLBLANKLINES ON;
SET FEEDBACK OFF;
SET SERVEROUTPUT ON;
CREATE OR REPLACE FUNCTION "INTOSQL_CLOB" (p SYS.ODCIVARCHAR2LIST) RETURN CLOB IS
    r CLOB;
BEGIN
    DBMS_LOB.CREATETEMPORARY(r, TRUE);
    FOR i IN 1 .. p.COUNT LOOP
        IF p(i) IS NOT NULL THEN
            DBMS_LOB.WRITEAPPEND(r, LENGTH2(p(i)), p(i));
        END IF;
    END LOOP;
    RETURN r;
END;
/
CREATE OR REPLACE FUNCTION "INTOSQL_BLOB" (p SYS.ODCIVARCHAR2LIST) RETURN BLOB IS
    r BLOB;
    piece RAW(2000);
BEGIN
    DBMS_LOB.CREATETEMPORARY(r, TRUE);
    FOR i IN 1 .. p.COUNT LOOP
        piece := HEXTORAW(p(i));
        DBMS_LOB.WRITEAPPEND(r, UTL_RAW.LENGTH(piece), piece);
    END LOOP;
    RETURN r;
END;
/

CREATE TABLE "CUSTOMERS" (
    "ID" NUMBER(10) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1001),
    "NAME" VARCHAR2(100 CHAR) NOT NULL,
    "EMAIL" VARCHAR2(150 CHAR) NOT NULL,
    "COUNTRY" VARCHAR2(2 CHAR) DEFAULT 'US' NOT NULL,
    "IS_ACTIVE" NUMBER(1) DEFAULT 1 NOT NULL,
    "SIGNED_UP" DATE,
    "CREATED_AT" TIMESTAMP(0) WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL,
    CONSTRAINT "CK_CUSTOMERS_ID" CHECK ("ID" >= 0),
    CONSTRAINT "CK_CUSTOMERS_IS_ACTIVE" CHECK ("IS_ACTIVE" IN (0, 1))
);

CREATE TABLE "ORDERS" (
    "ID" NUMBER(10) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 5001),
    "CUSTOMER_ID" NUMBER(10) NOT NULL,
    "STATUS" VARCHAR2(9 CHAR) DEFAULT 'pending',
    "TOTAL" NUMBER(10,2) NOT NULL,
    "ITEMS" NUMBER(5) DEFAULT 1 NOT NULL,
    "ORDERED_AT" TIMESTAMP(0) NOT NULL,
    "SHIPPED_AT" TIMESTAMP(0),
    "NOTE" VARCHAR2(255 CHAR),
    "UPDATED_AT" TIMESTAMP(0) WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL,
    CONSTRAINT "CK_ORDERS_ID" CHECK ("ID" >= 0),
    CONSTRAINT "CK_ORDERS_CUSTOMER_ID" CHECK ("CUSTOMER_ID" >= 0),
    CONSTRAINT "CK_ORDERS_STATUS" CHECK ("STATUS" IN ('pending', 'paid', 'shipped', 'cancelled')),
    CONSTRAINT "CK_ORDERS_ITEMS" CHECK ("ITEMS" >= 0)
);

BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
1,
'Ana Martínez',
'ana@example.com',
'MX',
1,
DATE '2023-01-15',
TIMESTAMP '2023-01-15 10:24:00 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
2,
'Zoë Müller',
'zoe@example.de',
'DE',
1,
DATE '2023-02-03',
TIMESTAMP '2023-02-03 08:11:42 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
3,
'José Peña',
'jose@example.es',
'ES',
0,
DATE '2023-03-21',
TIMESTAMP '2023-03-21 19:05:17 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
4,
'李雷',
'lilei@example.cn',
'CN',
1,
DATE '2023-05-09',
TIMESTAMP '2023-05-09 02:40:00 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
5,
'Noah O''Brien',
'noah@example.ie',
'IE',
1,
NULL,
TIMESTAMP '2023-06-30 14:00:00 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
6,
'Amélie Laurent',
'amelie@example.fr',
'FR',
1,
DATE '2024-01-02',
TIMESTAMP '2024-01-02 09:30:00 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
7,
'Ravi Patel',
'ravi@example.in',
'IN',
0,
DATE '2024-02-29',
TIMESTAMP '2024-02-29 23:59:59 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
8,
'Sofia Rossi 🌻',
'sofia@example.it',
'IT',
1,
DATE '2024-04-12',
TIMESTAMP '2024-04-12 12:12:12 +00:00'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
1,
1,
'shipped',
129.90,
3,
TIMESTAMP '2024-03-01 10:00:00',
TIMESTAMP '2024-03-02 16:30:00',
NULL,
TIMESTAMP '2024-03-02 16:30:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
2,
2,
'paid',
54.00,
1,
TIMESTAMP '2024-03-02 11:15:00',
NULL,
'Gift wrap 🎁',
TIMESTAMP '2024-03-02 11:20:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
3,
1,
'cancelled',
12.50,
1,
TIMESTAMP '2024-03-03 09:45:00',
NULL,
'Customer changed their mind',
TIMESTAMP '2024-03-03 10:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
4,
4,
'shipped',
980.00,
12,
TIMESTAMP '2024-03-05 02:10:00',
TIMESTAMP '2024-03-07 08:00:00',
'请小心轻放',
TIMESTAMP '2024-03-07 08:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
5,
5,
'pending',
45.75,
2,
TIMESTAMP '2024-03-08 17:20:00',
NULL,
'Leave at the door; ring twice',
TIMESTAMP '2024-03-08 17:20:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
6,
6,
'shipped',
310.40,
5,
TIMESTAMP '2024-03-10 13:00:00',
TIMESTAMP '2024-03-11 09:00:00',
'Fragile: "glass"',
TIMESTAMP '2024-03-11 09:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
7,
8,
'paid',
76.20,
2,
TIMESTAMP '2024-03-11 18:45:00',
NULL,
NULL,
TIMESTAMP '2024-03-11 18:46:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
8,
2,
NULL,
19.99,
1,
TIMESTAMP '2024-03-12 08:00:00',
NULL,
'Status lost in an old import',
TIMESTAMP '2024-03-12 08:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
9,
3,
'shipped',
64.00,
2,
TIMESTAMP '2024-03-14 15:30:00',
NULL,
'Shipping date never recorded',
TIMESTAMP '2024-03-15 10:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
10,
7,
'paid',
1499.00,
1,
TIMESTAMP '2024-03-15 21:05:00',
NULL,
'C:\Users\ravi\invoice.pdf',
TIMESTAMP '2024-03-15 21:05:00 +00:00'
);
COMMIT;
END;
/

-- Keys, indexes, foreign keys, counters and triggers, after the rows.
ALTER TABLE "CUSTOMERS" ADD CONSTRAINT "PK_CUSTOMERS" PRIMARY KEY ("ID");
ALTER TABLE "CUSTOMERS" ADD CONSTRAINT "UQ_CUSTOMERS_UQ_EMAIL" UNIQUE ("EMAIL");
ALTER TABLE "ORDERS" ADD CONSTRAINT "PK_ORDERS" PRIMARY KEY ("ID");
CREATE INDEX "IX_ORDERS_IDX_CUSTOMER" ON "ORDERS" ("CUSTOMER_ID");
CREATE INDEX "IX_ORDERS_IDX_STATUS_DATE" ON "ORDERS" ("STATUS", "ORDERED_AT");
ALTER TABLE "ORDERS" ADD CONSTRAINT "FK_ORDERS_CUSTOMER" FOREIGN KEY ("CUSTOMER_ID") REFERENCES "CUSTOMERS" ("ID") ENABLE NOVALIDATE;
BEGIN
    EXECUTE IMMEDIATE 'ALTER TABLE "ORDERS" ENABLE VALIDATE CONSTRAINT "FK_ORDERS_CUSTOMER"';
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Foreign key ' || '"FK_ORDERS_CUSTOMER"' || ' has rows without a parent: it stays unvalidated, and new rows are checked.');
END;
/
DECLARE
    next_id NUMBER;
BEGIN
    SELECT NVL(MAX("ID"), 0) + 1 INTO next_id FROM "CUSTOMERS";
    IF next_id < 1001 THEN
        next_id := 1001;
    END IF;
    EXECUTE IMMEDIATE 'ALTER TABLE "CUSTOMERS" MODIFY ("ID" GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH ' || next_id || '))';
END;
/
COMMENT ON TABLE "CUSTOMERS" IS 'People who bought at least once';
DECLARE
    next_id NUMBER;
BEGIN
    SELECT NVL(MAX("ID"), 0) + 1 INTO next_id FROM "ORDERS";
    IF next_id < 5001 THEN
        next_id := 5001;
    END IF;
    EXECUTE IMMEDIATE 'ALTER TABLE "ORDERS" MODIFY ("ID" GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH ' || next_id || '))';
END;
/
CREATE OR REPLACE TRIGGER "TR_ORDERS_UPDATED_AT" BEFORE UPDATE ON "ORDERS" FOR EACH ROW
BEGIN
    IF NOT UPDATING('UPDATED_AT') THEN
        :NEW."UPDATED_AT" := SYSTIMESTAMP;
    END IF;
END;
/
DROP FUNCTION "INTOSQL_CLOB";
DROP FUNCTION "INTOSQL_BLOB";
COMMIT;
EXIT;

Perbaikan

  1. "signed_up" dari customers kini mengizinkan NULL: sebagian nilainya tidak bisa disimpan dan menjadi NULL.
  2. Default "signed_up" di customers, 0000‑00‑00, bukan tanggal yang diterima Oracle, jadi kolom itu tanpa default.
  3. "status" dari orders kini mengizinkan NULL: sebagian nilainya tidak bisa disimpan dan menjadi NULL.
  4. "updated_at" dari orders berubah ke waktu saat ini di setiap pembaruan; di Oracle, trigger yang melakukannya.

Perlu diperiksa

  • 1 nilai di "signed_up" dari customers adalah tanggal nol atau mustahil, misalnya 0000‑00‑00, yang tidak bisa disimpan Oracle, jadi menjadi NULL. Jika tanggal itu bermakna, ganti di sumber dengan tanggal sungguhan sebelum membuat dump.
  • 1 nilai di "shipped_at" dari orders adalah tanggal nol atau mustahil, misalnya 0000‑00‑00 00:00:00, yang tidak bisa disimpan Oracle, jadi menjadi NULL. Jika tanggal itu bermakna, ganti di sumber dengan tanggal sungguhan sebelum membuat dump.
  • 1 nilai kosong di "status" dari orders menjadi NULL; Oracle menyimpan string kosong sebagai NULL. Jika kueri membandingkan kolom ini dengan ', bandingkan dengan IS NULL.

File Anda dikonversi di komputer ini dan tidak pernah diunggah.

Contoh lain:

Yang berubah dari MySQL ke Oracle

Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.

  • TINYINT(1), BOOL

    NUMBER(1) dengan CHECK 0 dan 1 jika setiap nilai 0 atau 1, selain itu NUMBER(3)

    BOOL di MySQL adalah TINYINT(1) yang bisa berisi angka apa pun dari -128 sampai 127. Oracle sebelum 23ai tidak punya kolom boolean, jadi kolom berisi 0 dan 1 menjadi NUMBER(1) dengan CHECK; kolom yang berisi 2 atau -1 mempertahankan angkanya.

    Baris laporan: bool_kept_numeric

  • UNSIGNED integers

    NUMBER yang cukup lebar untuk rentangnya, dengan CHECK bahwa nilainya tidak negatif

    NUMBER di Oracle memuat bilangan bulat dengan lebar apa pun yang ada di MySQL; CHECK mencegah nilai negatif seperti di MySQL.

  • ZEROFILL and display widths

    dihapus

    Isian nol adalah cara menampilkan angka, bukan bagian dari angka. Angkanya dipertahankan; format saat dibaca jika isian itu penting.

    Baris laporan: zerofill_dropped

  • FLOAT(M,D)

    BINARY_FLOAT atau BINARY_DOUBLE, tanpa skala

    Bilangan floating-point biner Oracle tidak punya skala tetap. Nilai yang tersimpan disalin apa adanya.

    Baris laporan: float_scale_dropped

  • DECIMAL(p,s)

    NUMBER(p,s) sampai 38 digit; VARCHAR2 jika lebih

    NUMBER di Oracle memuat 38 digit. Desimal yang lebih lebar disimpan sebagai teks agar setiap digit tetap tepat.

    Baris laporan: decimal_as_text

  • BIT(1), BIT(n)

    NUMBER(1), NUMBER(19) sampai 63 bit, NUMBER(20) untuk BIT(64)

    Field bit disimpan sebagai angka yang dibentuk bit-bitnya.

  • zero, partial or impossible dates (0000-00-00, 2024-02-30)

    NULL

    Oracle hanya menyimpan tanggal kalender yang nyata. MySQL menyimpan tanggal nol dan mustahil jika mode SQL-nya mengizinkan; tanggal itu menjadi NULL dan laporan menghitungnya.

    Baris laporan: invalid_date_null

  • NOT NULL columns with values that become NULL

    NOT NULL dihapus

    Kolom yang nilainya harus menjadi NULL, termasuk string kosong, tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.

    Baris laporan: not_null_relaxed

  • empty strings and empty binary values

    NULL

    Oracle menyimpan string kosong sebagai NULL, jadi nilai yang tadinya ' terbaca sebagai NULL. Laporan menghitungnya per kolom.

    Baris laporan: empty_string_null

  • DEFAULT '0000-00-00'

    tanpa default

    Default yang tidak bisa disimpan Oracle dihilangkan, bukan diganti dengan tanggal karangan.

    Baris laporan: zero_date_default

  • TIME

    INTERVAL DAY TO SECOND, yang memuat durasi

    Oracle tidak punya tipe jam dalam sehari, dan TIME di MySQL adalah durasi dari -838:59:59 sampai 838:59:59; interval memuat setiap nilai.

  • YEAR

    NUMBER(4) dengan CHECK rentangnya

    Oracle tidak punya tipe tahun; CHECK mempertahankan nilai yang sama dengan yang diizinkan MySQL.

  • CHAR(n), VARCHAR(n)

    VARCHAR2(n CHAR), menghitung karakter

    Panjang dihitung dalam karakter seperti di MySQL, dan MySQL mengembalikan nilai CHAR tanpa spasi di akhir, sebagaimana VARCHAR2 menyimpannya.

  • VARCHAR(n) and TEXT longer than 4000 bytes

    CLOB

    VARCHAR2 memuat 4000 byte secara default, jadi teks yang lebih panjang menjadi CLOB; kolom yang semua nilainya muat tetap VARCHAR2.

    Baris laporan: text_as_lob

  • DATETIME

    TIMESTAMP

    DATETIME adalah pembacaan jam dinding tanpa zona waktu, seperti TIMESTAMP. DATE menjadi DATE milik Oracle, yang juga memuat jam yang tetap tengah malam.

  • TIMESTAMP

    TIMESTAMP WITH TIME ZONE dalam zona yang disebutkan dump, UTC jika tidak disebutkan

    TIMESTAMP adalah satu momen. Dump menyebutkan zona tempat nilainya ditulis (mysqldump menulis UTC); tanpa itu, nilainya dibaca sebagai UTC dan laporan menyebutkannya.

    Baris laporan: timestamp_zone_assumed

  • ENUM

    VARCHAR2 dengan CHECK nilainya

    Text dengan CHECK mempertahankan nilai yang sama.

  • ENUM holding '' (MySQL's error value)

    NULL

    MySQL menyimpan string kosong saat nilai tidak valid masuk ke ENUM dalam mode SQL yang longgar. Oracle menyimpannya sebagai NULL, yang diizinkan CHECK, dan laporan menghitungnya bersama nilai kosong lainnya.

  • ENUM holding values outside its list

    tanpa CHECK

    Nilai yang tidak ada di daftar akan gagal di CHECK, jadi CHECK tidak dibuat.

    Baris laporan: enum_check_skipped

  • SET

    VARCHAR2 seperti yang ditulis MySQL ('a,b')

    Oracle tidak punya tipe set; teksnya sama dengan yang dikembalikan MySQL.

  • JSON

    CLOB

    Fungsi JSON Oracle membaca JSON dari teks di setiap versi, dan CLOB menyimpan nilai dengan ukuran berapa pun.

  • NUL bytes in text

    dipertahankan

    VARCHAR2 dan CLOB bisa memuat karakter NUL, jadi nilainya disalin apa adanya.

  • text that isn't valid in its character set

    byte yang rusak menjadi karakter pengganti

    Teks harus dibaca sebagai karakter agar bisa ditulis sebagai VARCHAR2.

    Baris laporan: invalid_utf8_replaced

  • text decoded twice (ñ)

    disalin apa adanya

    Dump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.

    Baris laporan: mojibake_suspected

  • AUTO_INCREMENT

    GENERATED BY DEFAULT ON NULL AS IDENTITY, dimulai ulang melewati id yang disalin

    Id yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi atau AUTO_INCREMENT dari dump, mana yang lebih tinggi.

  • MyISAM AUTO_INCREMENT on the second column of a key

    satu penghitung untuk tabel

    MyISAM menghitung per grup kolom pertama kunci; Oracle punya satu penghitung per tabel.

    Baris laporan: myisam_group_autoincrement

  • ON UPDATE CURRENT_TIMESTAMP

    trigger BEFORE UPDATE

    Trigger mengatur kolom ke waktu saat ini ketika pembaruan tidak mengaturnya.

    Baris laporan: on_update_trigger

  • generated columns

    kolom virtual

    Oracle hanya menghitung kolom generated saat dibaca; kolom STORED menjadi virtual dengan nilai yang sama.

    Baris laporan: stored_as_virtual

  • generated columns with functions Oracle lacks

    kolom biasa

    Rumus yang tidak bisa ditulis untuk Oracle menyisakan kolom biasa dan satu baris laporan.

    Baris laporan: generated_not_translated

  • INVISIBLE columns

    kolom INVISIBLE

    Oracle menyembunyikan kolom tak terlihat dari SELECT * seperti MySQL.

  • CHECK constraints

    diterjemahkan, langsung di CREATE TABLE

    CHECK di dalam tabel diuji saat setiap baris dimuat.

  • CHECK constraints with functions Oracle lacks

    tidak dibuat

    CHECK yang tidak bisa ditulis untuk Oracle dihilangkan dan dilaporkan.

    Baris laporan: check_skipped

  • CHECK ... NOT ENFORCED

    tidak dibuat

    MySQL menyimpan CHECK ini tanpa menerapkannya, jadi baris bisa melanggarnya.

    Baris laporan: check_not_enforced

  • defaults with functions Oracle lacks

    tanpa default

    Default yang tidak bisa ditulis untuk Oracle dihilangkan dan dilaporkan.

    Baris laporan: default_not_translated

  • keys and indexes on a prefix, c(20)

    indeks pada SUBSTR kolom

    Indeks fungsi pada awal kolom yang sama tetap membedakan baris yang sama, dan mengindeks kolom CLOB yang tidak bisa diindeks utuh oleh Oracle.

    Baris laporan: prefix_unique

  • FULLTEXT indexes

    tidak dibuat

    Oracle Text membangun pencarian teks lengkap dengan tipe indeks dan kuerinya sendiri.

    Baris laporan: fulltext_not_created

  • SPATIAL indexes

    tidak dibuat

    Geometri disimpan sebagai byte WKB, yang tidak bisa dibaca indeks spasial.

    Baris laporan: spatial_index_not_created

  • functional indexes, and indexes on whole CLOB or BLOB columns

    tidak dibuat

    Oracle tidak bisa mengindeks objek besar secara utuh, dan beberapa fungsi MySQL tidak punya padanan di Oracle.

    Baris laporan: index_skipped

  • foreign keys

    setelah data ENABLE NOVALIDATE, lalu divalidasi dengan peringatan untuk baris yatim

    Dump dimuat dengan FOREIGN_KEY_CHECKS=0 dan MyISAM tidak pernah memeriksa, jadi baris tanpa induk umum ditemukan. Key langsung memeriksa baris baru dan divalidasi terakhir; baris yatim membuatnya tetap tidak tervalidasi dengan peringatan, bukan menghentikan pemuatan.

  • ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT

    dihapus

    Foreign key Oracle hanya bertindak saat penghapusan, dengan CASCADE atau SET NULL.

    Baris laporan: foreign_key_action_unsupported

  • foreign keys to columns without a unique key

    tidak dibuat

    Oracle memerlukan primary key atau unique constraint pada kolom yang dirujuk; InnoDB tidak.

    Baris laporan: foreign_key_skipped

  • table and column names

    huruf besar jika berupa nama biasa, selain itu seperti ditulis

    Oracle menyimpan nama yang ditulis tanpa tanda kutip dalam huruf besar, jadi nama biasa menjadi huruf besar dan kueri bisa tanpa tanda kutip; nama lain mempertahankan huruf besar-kecilnya dan memerlukan tanda kutip.

    Baris laporan: identifier_renamed

  • names over 128 bytes

    dipersingkat

    Nama di Oracle 12.2 dan yang lebih baru memuat 128 byte.

    Baris laporan: name_shortened

  • GEOMETRY, POINT, POLYGON...

    BLOB berisi WKB

    WKB adalah bentuk standar yang dibaca setiap pustaka spasial; SDO_GEOMETRY memerlukan metadata Oracle Spatial.

    Baris laporan: geometry_as_blob

  • INET4, INET6, UUID (MariaDB)

    VARCHAR2(39), VARCHAR2(36)

    Oracle tidak punya kedua tipe itu; teksnya sama dengan yang dikembalikan MariaDB.

  • BINARY, VARBINARY, BLOB

    RAW sampai 2000 byte, selain itu BLOB

    Byte tetap byte.

  • PARTITION BY

    satu tabel

    Barisnya sama; partisi ulang tabel di Oracle jika diperlukan.

    Baris laporan: partitions_dropped

  • WITH SYSTEM VERSIONING (MariaDB)

    tabel dengan baris saat ini

    Dump hanya berisi baris saat ini.

    Baris laporan: system_versioning_dropped

  • MyISAM, MEMORY and other engines

    tabel biasa

    Oracle punya satu engine tabel.

    Baris laporan: engine_dropped

  • views, triggers, procedures, functions and events

    dicantumkan di laporan

    Kodenya ditulis dalam bahasa MySQL, jadi dicantumkan agar Anda bisa membuatnya ulang.

    Baris laporan: not_converted_objects

  • dumps without CREATE TABLE

    tipe dibaca dari nilai

    Dump yang dibuat dengan --no-create-info hanya berisi baris, jadi tipenya diambil dari nilai.

    Baris laporan: no_schema

  • geometries in a dump without CREATE TABLE

    BLOB berisi WKB

    Format geometri MySQL dikenali dari nilainya dan disimpan sebagai WKB standar.

    Baris laporan: geometry_inferred

  • _ci collations

    perbandingan persis

    Oracle membandingkan teks secara persis kecuali diminta lain.

    Baris laporan: case_insensitive_collation

  • SET NAMES utf8 from utf8mb4 tables

    dikonversi, dengan peringatan

    mysqldump di MySQL 5.x secara default menulis utf8 3 byte dan mengganti setiap emoji dengan tanda tanya sebelum konverter mana pun melihat file itu.

    Baris laporan: dump_lost_four_byte_chars

  • dumps without SET NAMES whose text isn't UTF-8

    dibaca sebagai Latin-1 (Windows-1252)

    latin1 di MySQL adalah Windows-1252, pengodean yang biasa dipakai dump semacam itu.

    Baris laporan: charset_guessed

  • sjis, cp932, gbk, big5 dumps

    dibaca sebagai UTF-8, dengan peringatan

    Pengodean ini belum didekode.

    Baris laporan: unsupported_charset

  • UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows

    dievaluasi

    Beberapa alat dump menulis nilai sebagai panggilan ini; panggilan itu dibaca sebagai nilai yang dihasilkannya, dengan WKT geografis diubah agar longitude lebih dulu.

  • other expressions in rows

    NULL

    Konverter yang tidak menjalankan database tidak bisa mengevaluasinya.

    Baris laporan: expression_value

  • DEFAULT in VALUES

    nilai default kolom

    Default literal disalin ke baris.

    Baris laporan: default_keyword_filled

  • DEFAULT in VALUES without a literal default

    NULL

    Tidak ada nilai untuk disalin.

    Baris laporan: default_keyword_null

  • REPLACE and INSERT IGNORE

    baris biasa

    Dump punya satu baris per kunci, jadi barisnya sama.

    Baris laporan: replace_as_insert

  • types IntoSQL doesn't know

    CLOB

    Text memuat nilai apa pun; ubah tipenya setelah pemuatan.

    Baris laporan: unknown_type

  • values that don't fit their column

    NULL

    Dump yang rusak atau ditulis manual bisa berisi nilai yang tidak muat di kolomnya; nilai itu menjadi NULL agar sisanya tetap dimuat.

    Baris laporan: invalid_value_null

  • unreadable geometries

    NULL

    Byte yang bukan geometri tidak bisa disimpan sebagai geometri.

    Baris laporan: bad_geometry

  • dumps of several databases

    satu skema, setiap tabel diberi nama database-nya di depan

    Skrip dimuat ke skema milik pengguna yang menjalankannya, jadi tabel dari database berbeda diberi nama database-nya di depan.

    Baris laporan: databases_merged

  • CREATE SEQUENCE (MariaDB)

    CREATE SEQUENCE, pada nilai yang sudah dicapai

    Sequence Oracle bekerja dengan cara yang sama.

  • VECTOR(n) (MariaDB 11.7+)

    CLOB dengan float sebagai array JSON

    Hanya Oracle 23ai yang punya tipe vektor; array JSON mempertahankan setiap float di setiap versi.

    Baris laporan: type_replaced

Di MySQLDi OracleBaris laporan
TINYINT(1), BOOLNUMBER(1) dengan CHECK 0 dan 1 jika setiap nilai 0 atau 1, selain itu NUMBER(3)BOOL di MySQL adalah TINYINT(1) yang bisa berisi angka apa pun dari -128 sampai 127. Oracle sebelum 23ai tidak punya kolom boolean, jadi kolom berisi 0 dan 1 menjadi NUMBER(1) dengan CHECK; kolom yang berisi 2 atau -1 mempertahankan angkanya.bool_kept_numeric
UNSIGNED integersNUMBER yang cukup lebar untuk rentangnya, dengan CHECK bahwa nilainya tidak negatifNUMBER di Oracle memuat bilangan bulat dengan lebar apa pun yang ada di MySQL; CHECK mencegah nilai negatif seperti di MySQL.
ZEROFILL and display widthsdihapusIsian nol adalah cara menampilkan angka, bukan bagian dari angka. Angkanya dipertahankan; format saat dibaca jika isian itu penting.zerofill_dropped
FLOAT(M,D)BINARY_FLOAT atau BINARY_DOUBLE, tanpa skalaBilangan floating-point biner Oracle tidak punya skala tetap. Nilai yang tersimpan disalin apa adanya.float_scale_dropped
DECIMAL(p,s)NUMBER(p,s) sampai 38 digit; VARCHAR2 jika lebihNUMBER di Oracle memuat 38 digit. Desimal yang lebih lebar disimpan sebagai teks agar setiap digit tetap tepat.decimal_as_text
BIT(1), BIT(n)NUMBER(1), NUMBER(19) sampai 63 bit, NUMBER(20) untuk BIT(64)Field bit disimpan sebagai angka yang dibentuk bit-bitnya.
zero, partial or impossible dates (0000-00-00, 2024-02-30)NULLOracle hanya menyimpan tanggal kalender yang nyata. MySQL menyimpan tanggal nol dan mustahil jika mode SQL-nya mengizinkan; tanggal itu menjadi NULL dan laporan menghitungnya.invalid_date_null
NOT NULL columns with values that become NULLNOT NULL dihapusKolom yang nilainya harus menjadi NULL, termasuk string kosong, tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.not_null_relaxed
empty strings and empty binary valuesNULLOracle menyimpan string kosong sebagai NULL, jadi nilai yang tadinya ' terbaca sebagai NULL. Laporan menghitungnya per kolom.empty_string_null
DEFAULT '0000-00-00'tanpa defaultDefault yang tidak bisa disimpan Oracle dihilangkan, bukan diganti dengan tanggal karangan.zero_date_default
TIMEINTERVAL DAY TO SECOND, yang memuat durasiOracle tidak punya tipe jam dalam sehari, dan TIME di MySQL adalah durasi dari -838:59:59 sampai 838:59:59; interval memuat setiap nilai.
YEARNUMBER(4) dengan CHECK rentangnyaOracle tidak punya tipe tahun; CHECK mempertahankan nilai yang sama dengan yang diizinkan MySQL.
CHAR(n), VARCHAR(n)VARCHAR2(n CHAR), menghitung karakterPanjang dihitung dalam karakter seperti di MySQL, dan MySQL mengembalikan nilai CHAR tanpa spasi di akhir, sebagaimana VARCHAR2 menyimpannya.
VARCHAR(n) and TEXT longer than 4000 bytesCLOBVARCHAR2 memuat 4000 byte secara default, jadi teks yang lebih panjang menjadi CLOB; kolom yang semua nilainya muat tetap VARCHAR2.text_as_lob
DATETIMETIMESTAMPDATETIME adalah pembacaan jam dinding tanpa zona waktu, seperti TIMESTAMP. DATE menjadi DATE milik Oracle, yang juga memuat jam yang tetap tengah malam.
TIMESTAMPTIMESTAMP WITH TIME ZONE dalam zona yang disebutkan dump, UTC jika tidak disebutkanTIMESTAMP adalah satu momen. Dump menyebutkan zona tempat nilainya ditulis (mysqldump menulis UTC); tanpa itu, nilainya dibaca sebagai UTC dan laporan menyebutkannya.timestamp_zone_assumed
ENUMVARCHAR2 dengan CHECK nilainyaText dengan CHECK mempertahankan nilai yang sama.
ENUM holding '' (MySQL's error value)NULLMySQL menyimpan string kosong saat nilai tidak valid masuk ke ENUM dalam mode SQL yang longgar. Oracle menyimpannya sebagai NULL, yang diizinkan CHECK, dan laporan menghitungnya bersama nilai kosong lainnya.
ENUM holding values outside its listtanpa CHECKNilai yang tidak ada di daftar akan gagal di CHECK, jadi CHECK tidak dibuat.enum_check_skipped
SETVARCHAR2 seperti yang ditulis MySQL ('a,b')Oracle tidak punya tipe set; teksnya sama dengan yang dikembalikan MySQL.
JSONCLOBFungsi JSON Oracle membaca JSON dari teks di setiap versi, dan CLOB menyimpan nilai dengan ukuran berapa pun.
NUL bytes in textdipertahankanVARCHAR2 dan CLOB bisa memuat karakter NUL, jadi nilainya disalin apa adanya.
text that isn't valid in its character setbyte yang rusak menjadi karakter penggantiTeks harus dibaca sebagai karakter agar bisa ditulis sebagai VARCHAR2.invalid_utf8_replaced
text decoded twice (ñ)disalin apa adanyaDump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.mojibake_suspected
AUTO_INCREMENTGENERATED BY DEFAULT ON NULL AS IDENTITY, dimulai ulang melewati id yang disalinId yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi atau AUTO_INCREMENT dari dump, mana yang lebih tinggi.
MyISAM AUTO_INCREMENT on the second column of a keysatu penghitung untuk tabelMyISAM menghitung per grup kolom pertama kunci; Oracle punya satu penghitung per tabel.myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMPtrigger BEFORE UPDATETrigger mengatur kolom ke waktu saat ini ketika pembaruan tidak mengaturnya.on_update_trigger
generated columnskolom virtualOracle hanya menghitung kolom generated saat dibaca; kolom STORED menjadi virtual dengan nilai yang sama.stored_as_virtual
generated columns with functions Oracle lackskolom biasaRumus yang tidak bisa ditulis untuk Oracle menyisakan kolom biasa dan satu baris laporan.generated_not_translated
INVISIBLE columnskolom INVISIBLEOracle menyembunyikan kolom tak terlihat dari SELECT * seperti MySQL.
CHECK constraintsditerjemahkan, langsung di CREATE TABLECHECK di dalam tabel diuji saat setiap baris dimuat.
CHECK constraints with functions Oracle lackstidak dibuatCHECK yang tidak bisa ditulis untuk Oracle dihilangkan dan dilaporkan.check_skipped
CHECK ... NOT ENFORCEDtidak dibuatMySQL menyimpan CHECK ini tanpa menerapkannya, jadi baris bisa melanggarnya.check_not_enforced
defaults with functions Oracle lackstanpa defaultDefault yang tidak bisa ditulis untuk Oracle dihilangkan dan dilaporkan.default_not_translated
keys and indexes on a prefix, c(20)indeks pada SUBSTR kolomIndeks fungsi pada awal kolom yang sama tetap membedakan baris yang sama, dan mengindeks kolom CLOB yang tidak bisa diindeks utuh oleh Oracle.prefix_unique
FULLTEXT indexestidak dibuatOracle Text membangun pencarian teks lengkap dengan tipe indeks dan kuerinya sendiri.fulltext_not_created
SPATIAL indexestidak dibuatGeometri disimpan sebagai byte WKB, yang tidak bisa dibaca indeks spasial.spatial_index_not_created
functional indexes, and indexes on whole CLOB or BLOB columnstidak dibuatOracle tidak bisa mengindeks objek besar secara utuh, dan beberapa fungsi MySQL tidak punya padanan di Oracle.index_skipped
foreign keyssetelah data ENABLE NOVALIDATE, lalu divalidasi dengan peringatan untuk baris yatimDump dimuat dengan FOREIGN_KEY_CHECKS=0 dan MyISAM tidak pernah memeriksa, jadi baris tanpa induk umum ditemukan. Key langsung memeriksa baris baru dan divalidasi terakhir; baris yatim membuatnya tetap tidak tervalidasi dengan peringatan, bukan menghentikan pemuatan.
ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULTdihapusForeign key Oracle hanya bertindak saat penghapusan, dengan CASCADE atau SET NULL.foreign_key_action_unsupported
foreign keys to columns without a unique keytidak dibuatOracle memerlukan primary key atau unique constraint pada kolom yang dirujuk; InnoDB tidak.foreign_key_skipped
table and column nameshuruf besar jika berupa nama biasa, selain itu seperti ditulisOracle menyimpan nama yang ditulis tanpa tanda kutip dalam huruf besar, jadi nama biasa menjadi huruf besar dan kueri bisa tanpa tanda kutip; nama lain mempertahankan huruf besar-kecilnya dan memerlukan tanda kutip.identifier_renamed
names over 128 bytesdipersingkatNama di Oracle 12.2 dan yang lebih baru memuat 128 byte.name_shortened
GEOMETRY, POINT, POLYGON...BLOB berisi WKBWKB adalah bentuk standar yang dibaca setiap pustaka spasial; SDO_GEOMETRY memerlukan metadata Oracle Spatial.geometry_as_blob
INET4, INET6, UUID (MariaDB)VARCHAR2(39), VARCHAR2(36)Oracle tidak punya kedua tipe itu; teksnya sama dengan yang dikembalikan MariaDB.
BINARY, VARBINARY, BLOBRAW sampai 2000 byte, selain itu BLOBByte tetap byte.
PARTITION BYsatu tabelBarisnya sama; partisi ulang tabel di Oracle jika diperlukan.partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)tabel dengan baris saat iniDump hanya berisi baris saat ini.system_versioning_dropped
MyISAM, MEMORY and other enginestabel biasaOracle punya satu engine tabel.engine_dropped
views, triggers, procedures, functions and eventsdicantumkan di laporanKodenya ditulis dalam bahasa MySQL, jadi dicantumkan agar Anda bisa membuatnya ulang.not_converted_objects
dumps without CREATE TABLEtipe dibaca dari nilaiDump yang dibuat dengan --no-create-info hanya berisi baris, jadi tipenya diambil dari nilai.no_schema
geometries in a dump without CREATE TABLEBLOB berisi WKBFormat geometri MySQL dikenali dari nilainya dan disimpan sebagai WKB standar.geometry_inferred
_ci collationsperbandingan persisOracle membandingkan teks secara persis kecuali diminta lain.case_insensitive_collation
SET NAMES utf8 from utf8mb4 tablesdikonversi, dengan peringatanmysqldump di MySQL 5.x secara default menulis utf8 3 byte dan mengganti setiap emoji dengan tanda tanya sebelum konverter mana pun melihat file itu.dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8dibaca sebagai Latin-1 (Windows-1252)latin1 di MySQL adalah Windows-1252, pengodean yang biasa dipakai dump semacam itu.charset_guessed
sjis, cp932, gbk, big5 dumpsdibaca sebagai UTF-8, dengan peringatanPengodean ini belum didekode.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rowsdievaluasiBeberapa alat dump menulis nilai sebagai panggilan ini; panggilan itu dibaca sebagai nilai yang dihasilkannya, dengan WKT geografis diubah agar longitude lebih dulu.
other expressions in rowsNULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya.expression_value
DEFAULT in VALUESnilai default kolomDefault literal disalin ke baris.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULLTidak ada nilai untuk disalin.default_keyword_null
REPLACE and INSERT IGNOREbaris biasaDump punya satu baris per kunci, jadi barisnya sama.replace_as_insert
types IntoSQL doesn't knowCLOBText memuat nilai apa pun; ubah tipenya setelah pemuatan.unknown_type
values that don't fit their columnNULLDump yang rusak atau ditulis manual bisa berisi nilai yang tidak muat di kolomnya; nilai itu menjadi NULL agar sisanya tetap dimuat.invalid_value_null
unreadable geometriesNULLByte yang bukan geometri tidak bisa disimpan sebagai geometri.bad_geometry
dumps of several databasessatu skema, setiap tabel diberi nama database-nya di depanSkrip dimuat ke skema milik pengguna yang menjalankannya, jadi tabel dari database berbeda diberi nama database-nya di depan.databases_merged
CREATE SEQUENCE (MariaDB)CREATE SEQUENCE, pada nilai yang sudah dicapaiSequence Oracle bekerja dengan cara yang sama.
VECTOR(n) (MariaDB 11.7+)CLOB dengan float sebagai array JSONHanya Oracle 23ai yang punya tipe vektor; array JSON mempertahankan setiap float di setiap versi.type_replaced

Muat skrip ke Oracle

Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.

NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @mysql.oracle.sql

Foreign key ditambahkan ENABLE NOVALIDATE, jadi baris baru langsung diperiksa, lalu divalidasi. Jika baris lama merujuk ke baris yang tidak ada, skrip menyebutkan constraint mana dan membiarkannya tidak tervalidasi, bukan gagal di tengah jalan.

Untuk dump yang besar, jalankan SQL*Plus di mesin yang sama dengan database. Skrip melakukan commit setiap 100 baris. Pengguna yang menjalankannya memerlukan CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER, dan CREATE PROCEDURE, serta kuota di tablespace-nya.

Buat dump MySQL untuk hasil terbaik

Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:

  • --default-character-set=utf8mb4 mempertahankan emoji dan karakter 4 byte lainnya, yang hilang di dump utf8 sebelum konverter melihatnya.
  • --hex-blob menulis kolom biner sebagai heksadesimal, yang tetap utuh saat disalin antarsistem.
  • --routines --triggers --events menambahkan objek-objek itu ke dump, sehingga laporan bisa mencantumkannya.

Yang tidak dikonversi

View, trigger, stored procedure, fungsi, dan event ditulis dalam bahasa masing-masing database. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk Oracle.

Pertanyaan tentang MySQL ke Oracle

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.

Apakah dump MariaDB bisa dibaca?

Ya. Dump dari mariadb-dump dan dari MariaDB 10.3 sampai 12 dikonversi dengan cara yang sama, termasuk kolom INET6, INET4, dan UUID milik MariaDB.

Apa yang terjadi pada tanggal 0000-00-00?

Oracle tidak punya tanggal nol, jadi tanggal itu menjadi NULL dan kolomnya menerima NULL. Laporan menyebutkan jumlahnya di setiap kolom. String kosong juga menjadi NULL, karena Oracle menyimpannya begitu.

Apakah nilai AUTO_INCREMENT dipertahankan?

Ya. Setiap kolom AUTO_INCREMENT menjadi kolom identity, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi, atau setelah AUTO_INCREMENT tabel jika itu lebih tinggi.

Apakah TINYINT(1) menjadi boolean?

Oracle sebelum 23ai tidak punya kolom boolean. Kolom yang semua nilainya 0 atau 1 menjadi NUMBER(1) dengan CHECK yang menjaganya tetap begitu; kolom yang berisi angka lain mempertahankannya, dan laporan menjelaskan alasannya.

Bagaimana dengan stored procedure dan trigger?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri. ON UPDATE CURRENT_TIMESTAMP adalah pengecualian: menjadi trigger Oracle.

Di versi Oracle mana skrip bisa dimuat?

Oracle 19c dan yang lebih baru. Setiap dump uji dimuat di 21c dan 23ai, dan berhenti di galat pertama jika ada yang salah.