WITH LEVEL_TABLE AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <=8)
SELECT LPAD( '★', NUM1 , '*' )
FROM LEVEL_TABLE;
p_num : 호스트 변수 또는 외부 변수이다.
문제 숫자를 물어보고, 숫자를 대답하면 해당 숫자만큼 ★이 그려지도록 출력
ACCEPT P_NUM PROMPT '숫자를 입력하세요.'
WITH LEVEL_TABLE AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <= &P_NUM)
SELECT LPAD( '★', NUM1 , '*' )
FROM LEVEL_TABLE;
ACEEPT :받아들여라~
P_NUM : 변수를 PROMPT : 내용을 띄우세요 ('숫자를입력하세요')=야기시키다
→ PROMPT 창이뜨면서 숫자를 입력하려고 뜨면 그 숫자를 입력한다.,
그 숫자가 WITH 절로 가 &P_NUM 으로 가게된다.
&P_NUM : 치환변수

직각삼각형을 거꾸로 출력
ACCEPT P_NUM PROMPT '숫자를입력하세요.'
WITH LEVEL_TABLE AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <= &P_NUM
)
SELECT LPAD( '★', NUM1 , '*' )
FROM LEVEL_TABLE
ORDER BY 1 DESC;
-> ORDER BY 절을 입력하여 출력 되는 별의 갯수가 높은 것 부터 출력 되면 거꾸로 출력 된다.
622 삼각형 출력
ACCEPT P_NUM PROMPT '숫자를입력하세요.'
WITH LEVEL_TABLE AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <= &P_NUM
)
SELECT LPAD(' ',10 - NUM1 ,' ')||LPAD( '★', NUM1 , '★' )
FROM LEVEL_TABLE;
해석 : 공백을 채워준다. 삼각형이므로 첫번째 출력 되는 행부터 공백이 많아야 하므로 10 - NUM1 을 하는 식을 넣어준다.
623 삼각형을 거꾸로 출력
ACCEPT P_NUM PROMPT '숫자를입력하세요.'
WITH LEVEL_TABLE AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <= &P_NUM
)
SELECT LPAD(' ',10 - NUM1 ,' ')||LPAD( '★', NUM1 , '★' )
FROM LEVEL_TABLE
ORDER BY 1 DESC;
★ 으로 해야 삼각형 모양이 제대로 출력된다. * 는 1 바이트 이기때문에 삼각형 모양이 출력 되지 않는다.
★ 는 3바이트 이다.
BYTE 를 확인하는 함수 (글자의 바이트 수 출력)
바이트 = 컴퓨터에차지하는 공간의최소단위
SELECT LENGTHB('*'), LENGTHB('★')
FROM DUAL;
624 마름모 출력
삼각형과, 역삼각형을 UNION ALL 로 묶어서 출력 되어 진다. → 위에 출력한 내용들로
ACCEPT P_NUM PROMPT '숫자를 입력하세요'
WITH LEVEL_TABLE AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <= &P_NUM
),
LEVEL_TABLE2 AS (SELECT LEVEL AS NUM2
FROM DUAL
CONNECT BY LEVEL <= &P_NUM-1
)
SELECT LPAD(' ',&P_NUM-NUM1 ,' ')||LPAD( '★', NUM1 , '★' )
FROM LEVEL_TABLE
UNION ALL
SELECT LPAD(' ', NUM2) || LPAD ('★', &P_NUM -NUM2 , '★')
FROM LEVEL_TABLE2;
또는
with star1 as (select level as num1
from dual
connect by level <= 5),
star2 as (select level as num2
from dual
connect by level <= 4
order by num2 desc)
select lpad(' ',5 - num1,' ')||lpad('★', num1, '★')
from star1
union all
select lpad(' ',5- num2,' ')||lpad('★', num2, '★')
from star2;
또는
WITH LEVEL_TABLE AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <= 5
)
SELECT LPAD(' ',10-NUM1 ,' ')||LPAD( '★', NUM1 , '★' )
FROM LEVEL_TABLE
UNION ALL
SELECT *
FROM (WITH LEVEL_TABLE AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <= 5-1
)
SELECT LPAD(' ',10-NUM1 ,' ')||LPAD( '★', NUM1 , '★' )
FROM LEVEL_TABLE
ORDER BY 1 DESC);
UNION ALL 은 WITH 절을 두개로 쓸수 없기 때문에 FROM 절의 SUB쿼리 안으로 넣어서 문제를 풀 수 있다.
→ 공백을 LPAD(' ', NUM2) NUM2 만큼 채워 넣는다.
→ LPAD ('★', &P_NUM -NUM2 , '★') 은★을 &P_NUM -NUM2 갯수만큼 채워 넣는것이다.
정사각형출력
accept p_num prompt '숫자를 입력하세요.'
with num_table as ( select level as num
from dual
connect by level <=&p_num )
SELECT LPAD('★',&P_NUM,'★')AS "사각형"
FROM NUM_TABLE;
직각사각형출력
ACCEPT P_NUM PROMPT '가로숫자입력'
ACCEPT P_NUM2 PROMPT '세로숫자입력'
WITH NUM_TABLE1 AS (SELECT LEVEL AS NUM1
FROM DUAL
CONNECT BY LEVEL <= &P_NUM2)
SELECT RPAD('★',&P_NUM,'★') AS 직각사각형
FROM NUM_TABLE1;
'Oracle > SQL' 카테고리의 다른 글
SQL 알고리즘 문제 직각삼각형의 여부 판단(피타고라스의정리이용) (0) | 2021.12.05 |
---|---|
SQL 알고리즘 ( 구구단 구현하기) (0) | 2021.12.05 |
SQL - DCL 문 (0) | 2021.12.05 |
SQL - WITH 절 사용 서브쿼리 Factoring (0) | 2021.12.05 |
SQL - WITH 절을 이용한 알고리즘 문제 (1) 구구단출력,log, 주사위던지기(랜덤)확률 문제풀기 (0) | 2021.12.05 |