在PL/SQL中,是否可以像下面这样创建一个三角形的恒星。我知道,在任何其他编程语言(如C、C++、Java )中都可以很容易地做到这一点,但我想知道仅仅使用SQL还是PL/SQL是否真的可行。这是我的家庭作业,我应该使用条件子句(如果是,否则),循环( for,WHILE)。
*
***
*****
*******
*********
***********
*************和
*****
***
*发布于 2017-07-18 11:24:45
这完全可以在sql (在Oracle中)中完成,如下所示:
SELECT RPAD(' ', :p_num_triangle_rows - LEVEL) || RPAD('*', LEVEL * 2 -1, '*') || RPAD(' ', :p_num_triangle_rows - LEVEL) triangle
FROM dual
CONNECT BY LEVEL <= :p_num_triangle_rows
ORDER BY CASE WHEN :p_ascending_or_descending = 'a' THEN LEVEL END ASC,
CASE WHEN :p_ascending_or_descending = 'd' THEN LEVEL END DESC;p_num_triangle_rows := 20,p_ascending_or_desc := 'a':
TRIANGLE
--------------------------------------------------------------------------------
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
***********************
*************************
***************************
*****************************
*******************************
*********************************
***********************************
*************************************
***************************************p_num_triangle_rows := 3,p_ascending_or_desc := 'd':
TRIANGLE
--------------------------------------------------------------------------------
*****
***
*ETA:这里有一个PL/SQL版本,可以实现您所追求的目标:
DECLARE
PROCEDURE produce_triangle_rows (p_num_triangle_rows IN NUMBER,
p_ascending_or_descending IN VARCHAR2 DEFAULT 'a')
IS
BEGIN
dbms_output.put_line('p_num_triangle_rows = '|| p_num_triangle_rows ||', p_ascending_or_descending = ' || p_ascending_or_descending);
FOR i IN 1..p_num_triangle_rows
LOOP
CASE WHEN p_ascending_or_descending = 'a' THEN
dbms_output.put_line(RPAD(' ', p_num_triangle_rows - i) || RPAD('*', i * 2 - 1, '*') || RPAD(' ', p_num_triangle_rows - i));
WHEN p_ascending_or_descending = 'd' THEN
dbms_output.put_line(RPAD(' ', i - 1) || RPAD('*', 2 * (p_num_triangle_rows - i) + 1, '*') || RPAD(' ', i - 1));
END CASE;
END LOOP;
END produce_triangle_rows;
BEGIN
produce_triangle_rows(p_num_triangle_rows => 5,
p_ascending_or_descending => 'a');
produce_triangle_rows(p_num_triangle_rows => 3,
p_ascending_or_descending => 'd');
END;
/
p_num_triangle_rows = 5, p_ascending_or_descending = a
*
***
*****
*******
*********
p_num_triangle_rows = 3, p_ascending_or_descending = d
*****
***
* 请注意,我将过程包装在一个匿名块中,这样我就可以用不同的参数调用它。您只需自己创建produce_triangle_rows过程,然后适当地调用它。
https://stackoverflow.com/questions/45163394
复制相似问题