复制Oracle数据表,连带复制主键约束,字段说明以及字段默认值
时间: 2023-07-20 10:29:09 浏览: 54
要复制一个Oracle数据表,包括主键约束、字段说明和字段默认值,可以使用以下SQL语句:
```sql
CREATE TABLE new_table AS
SELECT *
FROM old_table
WHERE 1=2;
ALTER TABLE new_table
ADD CONSTRAINT pk_constraint_name PRIMARY KEY (pk_column1, pk_column2, ...);
COMMENT ON COLUMN new_table.column_name IS 'Column description';
ALTER TABLE new_table MODIFY (column_name DEFAULT default_value);
```
其中,new_table是新建的数据表名,old_table是要复制的数据表名,pk_constraint_name是主键约束名,pk_column1, pk_column2等是主键列名,column_name是要添加说明和默认值的列名,default_value是要设置的默认值。
相关问题
复制Oracle数据库的一张表,连带复制主键约束,字段说明以及字段默认值一起复制,sql该怎么写
要复制Oracle数据库中的一张表,包括主键约束、字段说明和字段默认值,可以使用以下SQL语句:
```sql
CREATE TABLE new_table AS
SELECT *
FROM old_table
WHERE 1=2;
DECLARE
v_constraint_name VARCHAR2(100);
v_column_name VARCHAR2(100);
BEGIN
FOR c IN (
SELECT constraint_name, column_name
FROM all_cons_columns
WHERE table_name = 'OLD_TABLE' AND constraint_name IN (
SELECT constraint_name
FROM all_constraints
WHERE table_name = 'OLD_TABLE' AND constraint_type = 'P'
)
)
LOOP
v_constraint_name := c.constraint_name;
v_column_name := c.column_name;
EXECUTE IMMEDIATE 'ALTER TABLE new_table ADD CONSTRAINT '||v_constraint_name||' PRIMARY KEY ('||v_column_name||')';
END LOOP;
END;
DECLARE
v_column_name VARCHAR2(100);
v_column_comment VARCHAR2(100);
BEGIN
FOR c IN (
SELECT column_name, comments
FROM all_col_comments
WHERE table_name = 'OLD_TABLE'
)
LOOP
v_column_name := c.column_name;
v_column_comment := c.comments;
EXECUTE IMMEDIATE 'COMMENT ON COLUMN new_table.'||v_column_name||' IS '''||v_column_comment||'''';
END LOOP;
END;
DECLARE
v_column_name VARCHAR2(100);
v_default_value VARCHAR2(100);
BEGIN
FOR c IN (
SELECT column_name, data_default
FROM all_tab_cols
WHERE table_name = 'OLD_TABLE' AND data_default IS NOT NULL
)
LOOP
v_column_name := c.column_name;
v_default_value := c.data_default;
EXECUTE IMMEDIATE 'ALTER TABLE new_table MODIFY ('||v_column_name||' DEFAULT '||v_default_value||')';
END LOOP;
END;
```
其中,new_table是新建的数据表名,old_table是要复制的数据表名。该SQL语句使用了三个PL/SQL块,分别用于复制主键约束、字段说明和字段默认值。注意,执行该SQL语句时需要先以管理员身份登录数据库。
oracle中怎样查询数据表的哪个字段是主键
可以使用以下SQL语句查询数据表的主键字段:
```
SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name = '表名'
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;
```
其中,'表名'需要替换成你要查询的数据表的名称。该查询语句会返回该数据表的主键字段名、位置以及主键约束的状态和拥有者。