求一条“insert into ... top 1”的语句

onekey 2010-03-12 11:13:06
mssql的写法:insert into a(codename,oper,addtime) values((select top 1 codename from b where code=10),'admin',getdate())

可是oracle不支持top,怎么写啊?
...全文
327 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fyjava1984 2010-03-24
  • 打赏
  • 举报
回复
楼上的那样, 不同的数据库是不一样的, MSSQL, IQ是top, mysql是limit, oracle 是rownum
znwuyan318 2010-03-24
  • 打赏
  • 举报
回复
--oracle
insert into a(codename,oper,addtime) select codename 'admin',sysdate from b where code=10 and rownum < 2;



貌似这样 ROWNUM 好象不支持=号
umbrella_show 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dawugui 的回复:]
--oracle
insert into a(codename,oper,addtime) select codename 'admin',sysdate from b where code=10 and rownum = 1

另:你的mssql写法也是错的.应该为:
insert into a(codename,oper,addtime) select top 1 codename ,……
[/Quote]
`````
sql_xeppp 2010-03-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wildwave 的回复:]
没用过mssql,不过我想insert values 和insert select 两种写法可能会返回不同的结果。当没有符合条件的记录时,前者插入colname为空的一条记录,后者不插入
[/Quote]

呵呵  分析 的 透彻
tangren 2010-03-14
  • 打赏
  • 举报
回复
在oracle中没有与mssql的top对应的语法,但可以使用伪列rownum来达到,例取t表按begindate升序后的第一条记录:
select * from (select t.*,rownum rn from t order by t.begindate) where rn<2;
注意:如果在排序之后取,一定要象上面这样写子查询的
oracle在WEB上分页也是使用上述方式来实现
小灰狼W 2010-03-13
  • 打赏
  • 举报
回复
没用过mssql,不过我想insert values 和insert select 两种写法可能会返回不同的结果。当没有符合条件的记录时,前者插入colname为空的一条记录,后者不插入
zj654334362 2010-03-13
  • 打赏
  • 举报
回复
declare
cursor myc is select * from b;
remyc myc%rowtype;
begin
open myc;
fetch myc into remyc;
insert into a(codename,oper,addtime) values(remyc.codename,'admin',sysdate);
close myc;
end;
因为游标第一次是放在表中的首记录,也就是 top 1


zj654334362 2010-03-13
  • 打赏
  • 举报
回复
那个rownum 冒似不支持等于号的吧?这个可以用游标的
zhangwonderful 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dawugui 的回复:]

SQL code
--oracle(3楼我少了个逗号)
insert into a(codename,oper,addtime) select codename, 'admin',sysdate from b where code=10 and rownum = 1

另:你的mssql写法也是错的.应该为:
insert into a(codename,oper,addtime) selec……
[/Quote]
支持
iqlife 2010-03-12
  • 打赏
  • 举报
回复
mysql中用LIMIT,MSSQL里用TOP
Adebayor 2010-03-12
  • 打赏
  • 举报
回复
mysql中好像不支持top吧
dawugui 2010-03-12
  • 打赏
  • 举报
回复
不好意思.

突然想到,你是只取一条记录,你的MSSQL写法应该也对.

不过,我喜欢我的那种写法.
iqlife 2010-03-12
  • 打赏
  • 举报
回复
楼上的是对的
dawugui 2010-03-12
  • 打赏
  • 举报
回复
--oracle(3楼我少了个逗号)
insert into a(codename,oper,addtime) select codename, 'admin',sysdate from b where code=10 and rownum = 1

另:你的mssql写法也是错的.应该为:
insert into a(codename,oper,addtime) select top 1 codename ,'admin',getdate() from b where code=10



dawugui 2010-03-12
  • 打赏
  • 举报
回复
--oracle
insert into a(codename,oper,addtime) select codename 'admin',sysdate from b where code=10 and rownum = 1

另:你的mssql写法也是错的.应该为:
insert into a(codename,oper,addtime) select top 1 codename ,'admin',getdate() from b where code=10
iqlife 2010-03-12
  • 打赏
  • 举报
回复
getdate() 改为SYSDATE
iqlife 2010-03-12
  • 打赏
  • 举报
回复
用 insert into a(codename,oper,addtime) values((select codename from b where code=10 and rownum=1),'admin',getdate())

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧