Портирование файла из MySQL в Oracle Express 10g - PullRequest
0 голосов
/ 21 ноября 2019

После запуска (и почти завершения) проекта базы данных для школы я обнаружил, что должен был использовать Oracle Express вместо MySQL. Поэтому, когда я ввел код, написанный от mysql до oracle, все перестало работать. Я не слишком знаком с базами данных оракула, но я предположил, что их синтаксис намного меньше, чем у MySqls.

Есть ли в этом файле какие-либо структуры, отличающиеся в оракуловых БД?

все, что вы, ребята, видите, может помочь. Спасибо!

CREATE SCHEMA IF NOT EXISTS marys_limo_service;
use marys_limo_service;

DROP TABLE IF EXISTS Driver;
CREATE TABLE Driver(
    d_id int,
    d_name varchar(50),
    d_contact varchar(30),
    CONSTRAINT Driver_d_id PRIMARY KEY(d_id)
);

DROP TABLE IF EXISTS Limo;
CREATE TABLE Limo(
    l_id int,
    l_callsign varchar(12),
    l_type varchar(40),    
    CONSTRAINT Limo_pk PRIMARY KEY(l_id)
);

DROP TABLE IF EXISTS Aclient;
CREATE TABLE Aclient (
    c_id int,
    c_name varchar(50),
    c_contact varchar(30), 
    c_methpmt varchar(20),  
    CONSTRAINT Aclient_pk PRIMARY KEY(c_id) 
);

DROP TABLE IF EXISTS Qualify;
CREATE TABLE Qualify (
    q_id int,
    l_id int,
    d_id int,
    CONSTRAINT Qualify_q_id_PK PRIMARY KEY(q_id),
    CONSTRAINT Qualify_l_id_FK FOREIGN KEY(l_id) REFERENCES Limo(l_id),
    CONSTRAINT Qualify_d_id_FK FOREIGN KEY(d_id) REFERENCES Driver(d_id)
);

DROP TABLE IF EXISTS Rental;
CREATE TABLE Rental (
    r_id INT,
    r_date DATE,
    r_fee FLOAT,
    c_id INT,
    q_id INT,
    CONSTRAINT Rental_r_id_PK PRIMARY KEY(r_id),
    CONSTRAINT Rental_c_id_FK FOREIGN KEY(c_id) REFERENCES Aclient(c_id),
    CONSTRAINT Rental_q_id_FK FOREIGN KEY(q_id) REFERENCES Qualify(q_id)
);

INSERT INTO Driver 
VALUES 
    (1,"alf","9022332332"),
    (2,"bob","9022322323"); 

INSERT INTO Limo
VALUES
    (1,"Car One", "stretch limo"),
    (2,"Car Two", "hummer limo"),
    (3,"Car Three", "armored personnel carrier");

INSERT INTO Qualify
VALUES
    (1,1,1),
    (2,2,1),
    (3,3,1),
    (4,1,2),
    (5,2,2);

INSERT INTO Aclient 
VALUES 
    (1,"ann","9022332332", "cash"),
    (2,"bub","9022322323", "CC"); 

INSERT INTO Rental
VALUES
    (1, "2015/3/21", 550, 2, 1),
    (2, "2015/3/21", 1000, 1, 5),
    (3, "2015/3/20", 2050, 1, 3),
    (4, "2015/3/19", 550, 1, 1),
    (5, "2015/3/20", 500, 2, 4);

COMMIT;

-- Q.1
INSERT INTO marys_limo_service.driver
VALUES
    (3,"Cal","9024919999"),
    (4,"Dan","9024914545");
COMMIT;

-- Q.2
INSERT INTO Qualify
    values(6,1,3),
          (7,2,3),
       (8,3,3),
       (9,3,4);     

select * from Qualify


-- Q.3

UPDATE Rental 
SET q_id = 4
where 
    r_id = 1;

UPDATE Rental
SET q_id = 3
WHERE 
    r_id = 4;
select * from rental

-- Q.4

CREATE TEMPORARY TABLE Replace_contents 
    as (SELECT l_id, d_id FROM Qualify
        WHERE d_id != 1);


1 Ответ

3 голосов
/ 21 ноября 2019

В Oracle привилегированные пользователи (такие как SYS) могут создавать других пользователей. Это будет выглядеть так:

SQL> connect sys/pwd as sysdba
Connected.
SQL> select tablespace_name from user_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

SQL> create user so_test identified by test
  2  default tablespace users
  3  temporary tablespace temp
  4  quota unlimited on users;

User created.

SQL> grant create session, create table, create view to so_test;

Grant succeeded.

Теперь подключитесь как вновь созданный пользователь и запустите код (я исправил);позже я опубликую код, который вы можете использовать повторно. В Oracle нет drop if exists, поэтому я просто отбрасываю эти таблицы (обращая внимание на ограничения FK!) И игнорирую ошибки сброса.

Другие ошибки включают:

  • use varchar2, а не varchar (это не совсем ошибка, но Oracle рекомендует это)
  • использовать одинарные кавычки для строк, а не двойные
  • либо указывать маску формата даты (например, to_date('2015/03/21', 'yyyy/mm/dd')) или используйте литерал даты (например, date '2015-03-21') или alter session и укажите желаемый формат
  • завершите все команды точкой с запятой
  • insert into следует использовать для каждой строки отдельно, если вы не используете insert all или insert into ... select ... from

ОК, здесь мы идем:

SQL> connect so_test/test
Connected.
SQL> -- drop them first, because of FK constraints
SQL> drop table rental;
drop table rental
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> drop table qualify;
drop table qualify
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> -- Now, your code, fixed
SQL> DROP TABLE  Driver;
DROP TABLE  Driver
            *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> CREATE TABLE Driver(
  2      d_id int,
  3      d_name varchar2(50),
  4      d_contact varchar2(30),
  5      CONSTRAINT Driver_d_id PRIMARY KEY(d_id)
  6  );

Table created.

SQL> DROP TABLE  Limo;
DROP TABLE  Limo
            *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> CREATE TABLE Limo(
  2      l_id int,
  3      l_callsign varchar2(12),
  4      l_type varchar2(40),
  5      CONSTRAINT Limo_pk PRIMARY KEY(l_id)
  6  );

Table created.

SQL> DROP TABLE  Aclient;
DROP TABLE  Aclient
            *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> CREATE TABLE Aclient (
  2      c_id int,
  3      c_name varchar2(50),
  4      c_contact varchar2(30),
  5      c_methpmt varchar2(20),
  6      CONSTRAINT Aclient_pk PRIMARY KEY(c_id)
  7  );

Table created.

SQL> DROP TABLE  Qualify;
DROP TABLE  Qualify
            *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> CREATE TABLE Qualify (
  2      q_id int,
  3      l_id int,
  4      d_id int,
  5      CONSTRAINT Qualify_q_id_PK PRIMARY KEY(q_id),
  6      CONSTRAINT Qualify_l_id_FK FOREIGN KEY(l_id) REFERENCES Limo(l_id),
  7      CONSTRAINT Qualify_d_id_FK FOREIGN KEY(d_id) REFERENCES Driver(d_id)
  8  );

Table created.

SQL> DROP TABLE  Rental;
DROP TABLE  Rental
            *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> CREATE TABLE Rental (
  2      r_id INT,
  3      r_date DATE,
  4      r_fee FLOAT,
  5      c_id INT,
  6      q_id INT,
  7      CONSTRAINT Rental_r_id_PK PRIMARY KEY(r_id),
  8      CONSTRAINT Rental_c_id_FK FOREIGN KEY(c_id) REFERENCES Aclient(c_id),
  9      CONSTRAINT Rental_q_id_FK FOREIGN KEY(q_id) REFERENCES Qualify(q_id)
 10  );

Table created.

SQL> INSERT INTO Driver VALUES (1,'alf','9022332332');

1 row created.

SQL> INSERT INTO Driver VALUES (2,'bob','9022322323');

1 row created.

SQL>
SQL> INSERT INTO Limo VALUES
  2      (1,'Car One', 'stretch limo');

1 row created.

SQL> INSERT INTO Limo VALUES
  2      (2,'Car Two', 'hummer limo');

1 row created.

SQL> INSERT INTO Limo VALUES
  2      (3,'Car Three', 'armored personnel carrier');

1 row created.

SQL>
SQL> INSERT INTO Qualify VALUES
  2      (1,1,1);

1 row created.

SQL> INSERT INTO Qualify VALUES
  2      (2,2,1);

1 row created.

SQL> INSERT INTO Qualify VALUES
  2      (3,3,1);

1 row created.

SQL> INSERT INTO Qualify VALUES
  2      (4,1,2);

1 row created.

SQL> INSERT INTO Qualify VALUES
  2      (5,2,2);

1 row created.

SQL>
SQL> INSERT INTO Aclient VALUES
  2      (1,'ann','9022332332', 'cash');

1 row created.

SQL> INSERT INTO Aclient VALUES
  2      (2,'bub','9022322323', 'CC');

1 row created.

SQL> alter session set nls_date_format = 'yyyy/mm/dd';

Session altered.

SQL> INSERT INTO Rental VALUES
  2      (1, '2015/3/21', 550, 2, 1);

1 row created.

SQL> INSERT INTO Rental VALUES
  2      (2, '2015/3/21', 1000, 1, 5);

1 row created.

SQL> INSERT INTO Rental VALUES
  2      (3, '2015/3/20', 2050, 1, 3);

1 row created.

SQL> INSERT INTO Rental VALUES
  2      (4, '2015/3/19', 550, 1, 1);

1 row created.

SQL> INSERT INTO Rental VALUES
  2      (5, '2015/3/20', 500, 2, 4);

1 row created.

SQL>
SQL> COMMIT;

Commit complete.

SQL>
SQL> -- Q.1
SQL> INSERT INTO driver VALUES
  2      (3,'Cal','9024919999');

1 row created.

SQL> INSERT INTO driver VALUES
  2      (4,'Dan','9024914545');

1 row created.

SQL> COMMIT;

Commit complete.

SQL>
SQL> -- Q.2
SQL> INSERT INTO Qualify values
  2           (6,1,3);

1 row created.

SQL> INSERT INTO Qualify values
  2           (7,2,3);

1 row created.

SQL> INSERT INTO Qualify values
  2           (8,3,3);

1 row created.

SQL> INSERT INTO Qualify values
  2           (9,3,4);

1 row created.

SQL>
SQL> select * from Qualify;

      Q_ID       L_ID       D_ID
---------- ---------- ----------
         1          1          1
         2          2          1
         3          3          1
         4          1          2
         5          2          2
         6          1          3
         7          2          3
         8          3          3
         9          3          4

9 rows selected.

SQL>
SQL>
SQL> -- Q.3
SQL>
SQL> UPDATE Rental
  2  SET q_id = 4
  3  where
  4      r_id = 1;

1 row updated.

SQL>
SQL> UPDATE Rental
  2  SET q_id = 3
  3  WHERE
  4      r_id = 4;

1 row updated.

SQL> select * from rental;

      R_ID R_DATE          R_FEE       C_ID       Q_ID
---------- ---------- ---------- ---------- ----------
         1 2015/03/21        550          2          4
         2 2015/03/21       1000          1          5
         3 2015/03/20       2050          1          3
         4 2015/03/19        550          1          3
         5 2015/03/20        500          2          4

SQL>
SQL> -- Q.4
SQL> drop table replace_contents;
drop table replace_contents
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> CREATE global TEMPORARY TABLE Replace_contents
  2      as SELECT l_id, d_id FROM Qualify
  3          WHERE d_id != 1;

Table created.

SQL>

Код, который вы можете использовать повторно:

-- drop them first, because of FK constraints
drop table rental;
drop table qualify;
-- Now, your code, fixed
DROP TABLE  Driver;
CREATE TABLE Driver(
    d_id int,
    d_name varchar2(50),
    d_contact varchar2(30),
    CONSTRAINT Driver_d_id PRIMARY KEY(d_id)
);
DROP TABLE  Limo;
CREATE TABLE Limo(
    l_id int,
    l_callsign varchar2(12),
    l_type varchar2(40),    
    CONSTRAINT Limo_pk PRIMARY KEY(l_id)
);
DROP TABLE  Aclient;
CREATE TABLE Aclient (
    c_id int,
    c_name varchar2(50),
    c_contact varchar2(30), 
    c_methpmt varchar2(20),  
    CONSTRAINT Aclient_pk PRIMARY KEY(c_id) 
);
DROP TABLE  Qualify;
CREATE TABLE Qualify (
    q_id int,
    l_id int,
    d_id int,
    CONSTRAINT Qualify_q_id_PK PRIMARY KEY(q_id),
    CONSTRAINT Qualify_l_id_FK FOREIGN KEY(l_id) REFERENCES Limo(l_id),
    CONSTRAINT Qualify_d_id_FK FOREIGN KEY(d_id) REFERENCES Driver(d_id)
);
DROP TABLE  Rental;
CREATE TABLE Rental (
    r_id INT,
    r_date DATE,
    r_fee FLOAT,
    c_id INT,
    q_id INT,
    CONSTRAINT Rental_r_id_PK PRIMARY KEY(r_id),
    CONSTRAINT Rental_c_id_FK FOREIGN KEY(c_id) REFERENCES Aclient(c_id),
    CONSTRAINT Rental_q_id_FK FOREIGN KEY(q_id) REFERENCES Qualify(q_id)
);
INSERT INTO Driver VALUES (1,'alf','9022332332');
INSERT INTO Driver VALUES (2,'bob','9022322323'); 

INSERT INTO Limo VALUES
    (1,'Car One', 'stretch limo');
INSERT INTO Limo VALUES
    (2,'Car Two', 'hummer limo');
INSERT INTO Limo VALUES
    (3,'Car Three', 'armored personnel carrier');

INSERT INTO Qualify VALUES
    (1,1,1);
INSERT INTO Qualify VALUES
    (2,2,1);
INSERT INTO Qualify VALUES
    (3,3,1);
INSERT INTO Qualify VALUES
    (4,1,2);
INSERT INTO Qualify VALUES
    (5,2,2);

INSERT INTO Aclient VALUES 
    (1,'ann','9022332332', 'cash');
INSERT INTO Aclient VALUES 
    (2,'bub','9022322323', 'CC'); 
alter session set nls_date_format = 'yyyy/mm/dd';
INSERT INTO Rental VALUES
    (1, '2015/3/21', 550, 2, 1);
INSERT INTO Rental VALUES
    (2, '2015/3/21', 1000, 1, 5);
INSERT INTO Rental VALUES
    (3, '2015/3/20', 2050, 1, 3);
INSERT INTO Rental VALUES
    (4, '2015/3/19', 550, 1, 1);
INSERT INTO Rental VALUES
    (5, '2015/3/20', 500, 2, 4);

COMMIT;

-- Q.1
INSERT INTO driver VALUES
    (3,'Cal','9024919999');
INSERT INTO driver VALUES
    (4,'Dan','9024914545');
COMMIT;

-- Q.2
INSERT INTO Qualify values
         (6,1,3);
INSERT INTO Qualify values
         (7,2,3);
INSERT INTO Qualify values
         (8,3,3);
INSERT INTO Qualify values
         (9,3,4);     

select * from Qualify;


-- Q.3

UPDATE Rental 
SET q_id = 4
where 
    r_id = 1;

UPDATE Rental
SET q_id = 3
WHERE 
    r_id = 4;
select * from rental;

-- Q.4
drop table replace_contents;
CREATE global TEMPORARY TABLE Replace_contents 
    as SELECT l_id, d_id FROM Qualify
        WHERE d_id != 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...