CREATE TABLE Persons (
ID int PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
制約が定義されていないため、主キーを削除する方法はありますか?制約名を使用せずに主キーを削除する方法
CREATE TABLE Persons (
ID int PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
制約が定義されていないため、主キーを削除する方法はありますか?制約名を使用せずに主キーを削除する方法
"定義された制約が存在しないとしてPKを削除するには?"
実際に、それはあなたが願うかもしれないとしてすべてのビットのように簡単です:
SQL> create table t23 (id number primary key);
Table created.
SQL> select constraint_name, constraint_type
2 from user_constraints
3 where table_name = 'T23'
4/
CONSTRAINT_NAME C
------------------------------ -
SYS_C0034419 P
SQL> alter table t23 drop primary key;
Table altered.
SQL> select constraint_name, constraint_type
2 from user_constraints
3 where table_name = 'T23'
4/
no rows selected
SQL>
実行この制約名を取得するには:その後、
SELECT *
FROM user_cons_columns
WHERE table_name = Persons;
あなたが制約名を知らなくても、1つのSQLコマンドでそれを行うことができるとは思わないが、あなたが知っていることができ
ALTER TABLE Persons
DROP CONSTRAINT <pk constraint>;
を実行しますこの場合の制約名はシステムによって定義されます。 SYS....
で始まるもの。
また、PLSQL
ブロックを使用して同じ結果を得ることもできます。
あなたのケースについては下記の例をご覧ください。
CREATE TABLE Persons (
ID int PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
制約名を探す
select CONSTRAINT_NAME
From USER_CONSTRAINTS
where table_name='PERSONS'
AND CONSTRAINT_TYPE='P';
OUTPUT:= SYS_C0012152
ドロップ制約
ALTER TABLE PERSONS
DROP CONSTRAINT SYS_C0012152;
注:制約名SYS_C0012152
は、単一引用符で囲まれていません。
PLSQLブロックを行うには、同じ
declare
sql_stmt varchar2(255);
cons_name varchar2(30);
begin
select CONSTRAINT_NAME
into cons_name
From USER_CONSTRAINTS
where table_name='PERSONS'
AND CONSTRAINT_TYPE='P';
sql_stmt:=' ALTER TABLE PERSONS
DROP CONSTRAINT '||cons_name;
dbms_output.put_line(sql_stmt);
execute immediate sql_stmt;
end;
実際には1つのステートメントで行うことができます。私の答えを見てください。 – APC