首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用PL/SQL打印三角形的星星

如何使用PL/SQL打印三角形的星星
EN

Stack Overflow用户
提问于 2017-07-18 09:57:47
回答 4查看 2.8K关注 0票数 0

在PL/SQL中,是否可以像下面这样创建一个三角形的恒星。我知道,在任何其他编程语言(如C、C++、Java )中都可以很容易地做到这一点,但我想知道仅仅使用SQL还是PL/SQL是否真的可行。这是我的家庭作业,我应该使用条件子句(如果是,否则),循环( for,WHILE)。

代码语言:javascript
运行
复制
      *
     ***
    *****
   *******
  *********
 ***********
*************

代码语言:javascript
运行
复制
*****
 ***
  *
EN

Stack Overflow用户

发布于 2017-07-18 11:24:45

这完全可以在sql (在Oracle中)中完成,如下所示:

代码语言:javascript
运行
复制
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':

代码语言:javascript
运行
复制
TRIANGLE
--------------------------------------------------------------------------------
                   *
                  ***
                 *****
                *******
               *********
              ***********
             *************
            ***************
           *****************
          *******************
         *********************
        ***********************
       *************************
      ***************************
     *****************************
    *******************************
   *********************************
  ***********************************
 *************************************
***************************************

p_num_triangle_rows := 3,p_ascending_or_desc := 'd':

代码语言:javascript
运行
复制
TRIANGLE
--------------------------------------------------------------------------------
*****
 ***
  *

ETA:这里有一个PL/SQL版本,可以实现您所追求的目标:

代码语言:javascript
运行
复制
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过程,然后适当地调用它。

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45163394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档