2014-12-02 3 views
-1

나는 emp 테이블을 가지고있다 SQL> select * from emp; 내가 실행하는 절차를 작성하는 데 도움이 필요 테이블에서 select 문 (sqlplus)에서 ROWNUM <SEQUENCE.NEXTVAL을 사용할 수 있습니까?


5000 JOHN 
    5001 ADAM 
    5002 MIKE 

EMPNO ENAME 

은 테이블의 끝에까지 한 번에 하나의 행에 "EMP에서 EMPNO || ENAME 선택". N을 sequence.nextval로 사용하여 아래 명령문을 사용하려고 시도했습니다. 작동하지 않습니다. 이 문제를 해결하도록 도와주세요. 각 행에 액세스하려는 및 루프에서 그것으로 뭔가를 할 경우

select EMPNO||ENAME from emp 
where rownum < N+1 
minus 
select EMPNO||ENAME from emp 
where rownum < N; 
+0

이는 이해되지 않는다. sequence.nextval은 결코 테이블 행에 없어야합니다. 무엇을 성취하려고합니까? – OldProgrammer

+0

설명 할 수 없어서 죄송합니다. sequence.nextval은 테이블에 존재하지 않습니다. 변수를 N = 1,2,3 등과 같이 사용하도록 생각하고 있습니다. 행별로 행을 실행하려면 "EMPNO || ENAME from emp"을 반복해야합니다. 이 문제에 대해 완전히 잘못 알고 있다면 알려주십시오. – muhib

+0

'행별로'란 무엇을 의미합니까? 어떤 방식으로 각 행의 데이터에 액세스하려면 for 루프 커서를 사용하십시오. 구글 그. – OldProgrammer

답변

0

는 :

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; 
+0

아래와 같이 편집했습니다. 이 오류가 계속 발생합니다 ""emp에서 EMPNO || ENAME을 (를) 선택하십시오. ORA-06550 : 9 행 *이 ERROR 행 9 열 5 : PLS-00428 : INTO 절이 SELECT 문 "" 가 TMP의 VARCHAR2 (500)을 선언 할 것으로 예상되고; 은 EMP 루프에서 선택 EMPNO ENAME || (EMP empno에 의해 순서에서 선택한 *)에 대한 emp_rec 시작; tmp : = emp_rec.empno || emp_rec.ename; end loop; 끝; / – muhib

+0

추가 한 선택 항목을 삭제하십시오. emp_rec 레코드 속성을 참조하십시오. 문자열 concat을 원하면 for 루프 커서에서 select를 변경하십시오. – OldProgrammer

+0

고맙습니다 만 출력물을 볼 수는 없습니다. 이걸 도와 주실 수 있겠습니까? 첫 번째 행의 o/p는 파일에 스풀되어야합니다 (이 파일은 linux에서 mysql --host 명령과 함께 사용됩니다). 그리고 나서 나는 두 번째 행의 o/p가 리눅스에서 다시 실행될 동일한 파일에서 덮어 쓰기가 필요합니다. 테이블의 모든 행이 덮일 때까지이 작업을 도와 줄 수 있습니까? 이것은 곤경에 빠진 나의 대학을위한 것입니다! – muhib