请教个oracle 的 sql语句问题。例如表A有一条数据主键a,然后复制这条数据插入A,主键改为b,在线求指导

如题所述

第1个回答  2012-02-27
insert into A(pk,col1,col2...)
select b as pk,col1,col2...
from A
where pk=a;追问

楼上没明白我的意思,同一张表。直接复制,但是要把主键修改掉。

追答

你的目的不是增加一条记录么?除了主键以外,别的都不变。。。
难道是直接修改主键?

追问

饿,对,是直接复制当前数据,然后插入当前表中,但主键肯定要先改掉。我刚才没看明白,以为直接复制了,你的意思是把B的PK重新赋值么?

追答

是啊,新增一条和主键a一样的记录,只是主键a改为b,避免主键冲突;
pk是主键字段

追问

那有个问题,关于b的赋值问题,b是外界客观定义好的一个值,上面select b as pk。的意思是select '定义好的值' as pk 这样写么?

追答

差不多这个意思。b是常量;
select 2 as pk
from A;
得到的就是2;

本回答被提问者采纳

oracle表只能具有一个主键
主键是通过SQL语句建立以实体完整性 实现,如果 选择老板,constraint_name命令,从table_name的USER_CONSTRAINTS主人在哪里='用户名'和constraint_type ='P'和TABLE_NAME ='表名';或 张罗着USER_CONS_COLUMNS USER_TAB_COLUMNS:用户名,表名,主键,主键对应的字段名 ...

在ORACLE,怎么用一个SQL语句查询一个已知表的主键字段
1.以SCOTT用户登录。2.执行以下代码。SET PAGESIZE 0 SET LONG 90000 SELECT dbms_metadata.get_ddl('TABLE', table_name) FROM user_tables where table_name='EMP';3.查找类似CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")的内容,后面部分就是表的主键字段。如不知表所属的owner,可以用:sele...

oracle中有一个表字段为A,有索引,也是主键。现在要在这个字段查询是否包 ...
假设你的这个表的表名是TA 你再新建一个表,假设表名为TB 先将你4万个数据导入到TB中 然后你可以关联两个表就简单多了 可以查询个数:select count(a) from ta where a in (select a from tb)

oracle 触发器 插入表A中一条数据 然后在表B中删除这条数据的相关内容...
CREATE OR REPLACE TRIGGER tr_del after insert--因为这里是添加后再删除所以是after insert ON 资产报废表FOR EACH ROW --行级触发 begin delete from 资产表 where 资产表主键=:new.资产报废表外键 end;

oracle 中查看一张表是否有主键,主键在哪个字段上的语句怎么查如要查a...
select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.constraint_name = b.constraint_name and b.constraint_type = 'P'and a.table_name = 'AA'---大写 查看AA表的主键约束名称,以及主键约束的字段名称。如果没有,则返回空 ...

请问oracle中想在一条sql语句里面做插入并返回插入后的记录的主键的值...
如果你插入的信息里面有唯一索引,可以根据查询来得到主键。另外一个就是根据某种排序top 1 或者 max() 来查询得到。

oracle违反主键唯一约束
那里面的值小于现在你表中的主键值,所以当有数据插入时,数据会从那张记录主键值表中获取当前主键值加1,然后插入表,但是表中的值已经存在了,就造成主键唯一冲突。具体原因很多,但是很大一部分是自己手动往表中插入过数据造成的。这个是我的猜测,希望对你有帮助。

急!如何使用SQL语句在复制多行数据时实现主键递增?
你没说清楚是从最大值递增,改一下:insert into table1(ID,name,age)select to_char(id+(select max(id from table1)),'0000'),name,age from table1 这样就可以了

Oracle A,B,C...表插入一条信息其中A表主键插入Seq.Nextval,接下来的B...
用触发器。建个行集触发器,after insert on a表,就把b c d 的对应字段Update用a表的这个列去更新

oracle数据库中怎么能避免相同的数据插入数据库多遍?sql语句怎么处理呢...
回答:INSERT INTO T_LOG ( LOG_ID ,LOG_NAME ) VALUES ( T_LOG.nextval strName ); T_LOG就是sequence的名字 不是将该字段省略~而是在插入值的时候

相似回答