oracle存储过程into赋值,子查询等,来帮我看看

mkjchen it  2012-04-26 03:39:41
jianju number(20,4);变量

for r in (select * from( select * from tb_points where district_name='XMQ' and location_name='上行' and pyear='2003' and pmonth='04' order by milestone)where rownum=1) loop --没有问题


select * from (select milestone-r.milestone into jianju from tb_points where district_name=r.district_name and location_name=r.location_name and pyear=r.pyear and pmonth=r.pmonth and milestone > r.milestone order by milestone) where rownum=1 ; --有问题

红色地方into jianju 变量赋值。

第二红色地方 先milestone排序后, 取第一行。

dbms_output.put_line(jianju);输出,

Error: PL/SQL: ORA-01744: 不合理的 INTO 报错。

或者有什么方法 先排序好,然后取第一行,用into 取值。
或者有什么方法 for循环 r 怎么取下一条记录。


...全文
330 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
forgetsam 2012-04-27
select aaa into jianju  from (select milestone-r.milestone aaa  from tb_points where district_name=r.district_name and location_name=r.location_name and pyear=r.pyear and pmonth=r.pmonth and milestone > r.milestone order by milestone) where rownum=1
回复
hupeng213 2012-04-27
DECLARE
jianju NUMBER(20,4) := 0;--变量
dist number(20,4) := 0;

strSql varchar2(1000) := '';
BEGIN
--按milestone排序后,
FOR r IN
(SELECT *
FROM tb_points
WHERE district_name='XMQ'
AND location_name ='上行'
AND pyear ='2003'
AND pmonth ='04'
ORDER BY milestone
)
LOOP --没有问题
dist := jianju;
jiangju := r.milestone;
dist := jiangju - dist;
--dist就是需要的两条记录之间的间距
--这里写INSERT INTO 语句
/*
--例如下写法
strSql := 'insert into tableOther (milestone) values (' || to_char(jianju) || ')'
execute immediate strSql;
commit;
*/
END LOOP;
END;

--附:如何仅仅是取与上一条记录的差值,可以直接用LAG函数写出查询结果。


回复
nxvan 2012-04-27
还是没太明白LZ的意思,不过游标应该可以这样取值
回复
mkjchen 2012-04-26
查询数据,然后在插入另外一张表。for循环时 怎么读取 下一条记录。因为下一条数据的字段 减去 当前数据的字段。
回复
啊彪123 2012-04-26
搞不明白lz想干嘛,你是想查数据呢,还是插数据。
回复
mkjchen 2012-04-26
不可以,那样就是取一条数据,没发排序了
回复
nxvan 2012-04-26
rownum=1放括号里面去用and连接,不知道可以不
回复
相关推荐
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2012-04-26 03:39
社区公告
暂无公告