在PL/SQL中,是否可以像下面这样创建一个三角形的恒星。我知道,在任何其他编程语言(如C、C++、Java )中都可以很容易地做到这一点,但我想知道仅仅使用SQL还是PL/SQL是否真的可行。这是我的家庭作业,我应该使用条件子句(如果是,否则),循环( for,WHILE)。
*
***
*****
*******
*********
***********
*************和
*****
***
*发布于 2017-07-18 10:50:47
尝尝这个。第一个循环将打印成三角形的星星,第二个循环将其反转。
在PL/SQL中:
BEGIN
FOR i IN 1 .. :p
LOOP
DBMS_OUTPUT.put_line (LPAD (LPAD ('*', i, '*'), :p + 1, ' '));
END LOOP;
FOR i IN 1 .. :p
LOOP
DBMS_OUTPUT.put_line (LPAD (LPAD ('*', :p-i, '*'), :p + 1, ' '));
END LOOP;
END;在SQL:中
SELECT LPAD (LPAD ('*', level, '*'), :p + 1, ' ') a
FROM DUAL
CONNECT BY LEVEL <= :p;发布于 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过程,然后适当地调用它。
发布于 2017-07-18 10:05:10
尝尝这个
declare @count int,@num int,@num1 int, @space int, @str varchar(50)
set @count = 3 set @num = 1
while(@num<=@count)
begin
set @num1 = 0 set @space = @count-@num
while (@num1<@num)
begin
if @str is null
set @str = '* '
else
set @str = @str+'* ' set @num1 = @num1+1
end
print (space(@space)+@str)
set @num = @num+1 set @str = null
end或
Declare @x varchar(20)=0,@y varchar(20)=5
while(@y>0)
begin
print space(@y)+replicate('*',@x)+replicate('*',@x+1)
set @y=@y-1
set @x=@x+1
endhttps://stackoverflow.com/questions/45163394
复制相似问题