我們試圖洗掉資料庫中的所有表,然后重新創建它們,但 oracle 拋出錯誤。錯誤報告是:
Error report -
ORA-06550: line 12, column 1:
PLS-00103: Encountered the symbol "CREATE"
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
代碼是:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE ' || EMPLOYEE;
EXECUTE IMMEDIATE 'DROP TABLE ' || ADDRESS;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
CREATE TABLE EMPLOYEE(
EmployeeID int,
FirstName varchar(225),
LastName varchar(255),
Position varchar(255),
SSN int,
Address varchar(255),
Phone int,
AddressID int,
PRIMARY KEY (EmployeeID),
FOREIGN KEY (AddressID) REFERENCES ADDRESS(AddressID)
);
CREATE TABLE ADDRESS(
AddressID int,
Street varchar(225),
City varchar(225),
State varchar(225),
Zip int
);
我們想對所有表都這樣做,但到目前為止,它對我們一開始嘗試洗掉的兩個表不起作用。
uj5u.com熱心網友回復:
應該是這樣的:
SQL> BEGIN
2 BEGIN
3 EXECUTE IMMEDIATE 'DROP TABLE EMPLOYEE';
4 EXCEPTION
5 WHEN OTHERS THEN
6 IF sqlcode != -942 THEN
7 RAISE;
8 END IF;
9 END;
10
11 BEGIN
12 EXECUTE IMMEDIATE 'DROP TABLE ADDRESS';
13 EXCEPTION
14 WHEN OTHERS THEN
15 IF sqlcode != -942 THEN
16 RAISE;
17 END IF;
18 END;
19
20 END;
21 /
PL/SQL procedure successfully completed.
SQL> CREATE TABLE ADDRESS(
2 AddressID int primary key,
3 Street varchar(225),
4 City varchar(225),
5 State varchar(225),
6 Zip int
7 );
Table created.
SQL> CREATE TABLE EMPLOYEE(
2 EmployeeID int,
3 FirstName varchar(225),
4 LastName varchar(255),
5 Position varchar(255),
6 SSN int,
7 Address varchar(255),
8 Phone int,
9 AddressID int,
10 PRIMARY KEY (EmployeeID),
11 FOREIGN KEY (AddressID) REFERENCES ADDRESS(AddressID)
12 );
Table created.
SQL>
你做錯了什么?
- 表名應該用動態 SQL 括在單引號中,因為 - 如果它們不存在,代碼將失敗
- 將每個動態 SQL 陳述句括在其自己的
BEGIN-EXCEPTION-END塊中,以避免在其中一個表存在(而另一個不存在)時出現問題 - 用斜杠終止 PL/SQL 塊(第 11 行);否則,某些工具(如 SQL*Plus)將無法將整個代碼作為腳本執行
- 首先創建
ADDRESS表(并添加主鍵約束,EMPLOYEE否則外鍵將失敗)
uj5u.com熱心網友回復:
嘗試交換 CREATE 表,因為您嘗試使用 FOREIGN KEY (AddressID),它在創建時不可訪問。
CREATE TABLE ADDRESS(
...
CREATE TABLE EMPLOYEE(
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376671.html
