我可以在表的选择语句(sqlplus)中使用 ROWNUM < SEQUENCE.NEXTVAL 吗?
Posted
技术标签:
【中文标题】我可以在表的选择语句(sqlplus)中使用 ROWNUM < SEQUENCE.NEXTVAL 吗?【英文标题】:Can I Use ROWNUM < SEQUENCE.NEXTVAL in select statement(sqlplus) on a table? 【发布时间】:2014-12-02 16:52:00 【问题描述】:我有一张临时桌子 SQL> select * from emp;
EMPNO ENAME
5000 JOHN
5001 ADAM
5002 MIKE
我需要帮助编写一个程序来一次在一行上运行“从 emp 中选择 EMPNO||ENAME”,直到表格结束。 尝试将以下语句与 N 一起用作 sequence.nextval。这没用。请帮我解决这个问题。
select EMPNO||ENAME from emp
where rownum < N+1
minus
select EMPNO||ENAME from emp
where rownum < N;
【问题讨论】:
这毫无意义。 sequence.nextval 不应该存在于表行中。你想完成什么? 抱歉无法解释。表中不存在 sequence.nextval。我正在考虑像变量一样使用序列,以便 N=1,2,3 等等。我需要循环“从 emp 中选择 EMPNO||ENAME”以逐行运行。如果我对此完全错误,请告诉我。 “逐行”是什么意思?如果您想以某种方式访问每一行的数据,请使用 for 循环游标。谷歌那个。 cursor yes.. 我的意思是在第一次迭代中对第一行进行选择,在第二次迭代中对第二行进行选择,依此类推。希望得到答复。谢谢! 【参考方案1】:如果你想访问每一行并循环使用它:
declare
tmp as varchar2(500); -- whatever size you need
begin
for emp_rec in (select * from emp order by empno )
loop
-- do something with record data
tmp := emp_rec.empno || emp_rec.ename;
-- etc.
end loop;
end;
【讨论】:
编辑如下。仍然得到这个错误 "" select EMPNO||ENAME from emp; * 第 9 行出现错误:ORA-06550:第 9 行,第 5 列:PLS-00428:此 SELECT 语句中应有 INTO 子句"" declare tmp varchar2(500); begin for emp_rec in (select * from emp order by empno) loop select EMPNO||ENAME from emp; tmp := emp_rec.empno || emp_rec.ename;结束循环;结尾; / 删除您添加的选择。引用emp_rec 记录属性。如果您想要字符串 concat,则更改 for 循环光标中的选择。 谢谢它的工作,但我看不到任何输出。你能帮我解决这个问题吗 - 第一行的 o/p 需要在一个文件中进行假脱机(我将在 linux 上与 mysql --host 命令一起使用)。然后我需要将第二行的 o/p 覆盖在同一个文件中,我将在 linux 上再次运行该文件。你能帮我做到这一点,直到表格中的所有行都被覆盖。这是给我的大学的麻烦抱歉! 仅供参考。我正在尝试从 oracle 中提取这些数据并使用它在 MYSQL 中创建数据库。 SO 不是一个有人会为您编写完整的工作应用程序的论坛。对不起。以上是关于我可以在表的选择语句(sqlplus)中使用 ROWNUM < SEQUENCE.NEXTVAL 吗?的主要内容,如果未能解决你的问题,请参考以下文章