http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=79&page=1&position=1글쓴이 : 김홍선
변수 :n 이 주어졌을때,
:n 보다 작거나 같은 소수(prime number)를 구해보자.
쿼리는 아래와 같다.
SELECT level# prime
FROM (SELECT LEVEL level#
FROM DUAL
WHERE LEVEL > 1
CONNECT BY LEVEL <= :n)
WHERE NOT EXISTS (SELECT 1
FROM DUAL
WHERE MOD (level#, LEVEL) = 0 AND LEVEL > 1
CONNECT BY LEVEL <= level# / 2)
그리고 아래는 크기순으로 처음 :n개의 소수를 구하는 쿼리다.
POWER (10, 125) 함수 때문에 쿼리가 뭔가 애써 끼워 맞춘듯한 느낌을 준다.
더 compact한 쿼리는 없을까?
SELECT level# prime
FROM (SELECT LEVEL level#
FROM DUAL
WHERE LEVEL > 1
CONNECT BY LEVEL <= POWER (10, 125))
WHERE NOT EXISTS (SELECT 1
FROM DUAL
WHERE MOD (level#, LEVEL) = 0 AND LEVEL > 1
CONNECT BY LEVEL <= level# / 2) AND ROWNUM <= :n
변수 :n 이 주어졌을때,
:n 보다 작거나 같은 소수(prime number)를 구해보자.
쿼리는 아래와 같다.
SELECT level# prime
FROM (SELECT LEVEL level#
FROM DUAL
WHERE LEVEL > 1
CONNECT BY LEVEL <= :n)
WHERE NOT EXISTS (SELECT 1
FROM DUAL
WHERE MOD (level#, LEVEL) = 0 AND LEVEL > 1
CONNECT BY LEVEL <= level# / 2)
그리고 아래는 크기순으로 처음 :n개의 소수를 구하는 쿼리다.
POWER (10, 125) 함수 때문에 쿼리가 뭔가 애써 끼워 맞춘듯한 느낌을 준다.
더 compact한 쿼리는 없을까?
SELECT level# prime
FROM (SELECT LEVEL level#
FROM DUAL
WHERE LEVEL > 1
CONNECT BY LEVEL <= POWER (10, 125))
WHERE NOT EXISTS (SELECT 1
FROM DUAL
WHERE MOD (level#, LEVEL) = 0 AND LEVEL > 1
CONNECT BY LEVEL <= level# / 2) AND ROWNUM <= :n