Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能给我详细解释一下这个PL/SQL语句吗?_Sql_Oracle_Plsql_Plsqldeveloper - Fatal编程技术网

有人能给我详细解释一下这个PL/SQL语句吗?

有人能给我详细解释一下这个PL/SQL语句吗?,sql,oracle,plsql,plsqldeveloper,Sql,Oracle,Plsql,Plsqldeveloper,我们在我的一节课上讨论了这个问题,但我并没有真正理解for循环是如何工作的。我知道输出会在左边打印数字0-20,我对右边的数字是如何增加的感到困惑。打印的顺序是相同的。它们的递归定义如下:a\u n=a\u(n-1)+a\u(n-2)。在代码片段中,p扮演a(n-2),q扮演a(n-1)。想象一下,从右到左打印的序列上叠加了一个滑动窗口(r,q,p)。在每次迭代中,窗口向左移动一步。lpad函数将字符串填充到给定长度。您可以选择添加第三个参数,即填充字符(默认为)。注意,有一个同级函数rpad。

我们在我的一节课上讨论了这个问题,但我并没有真正理解for循环是如何工作的。我知道输出会在左边打印数字0-20,我对右边的数字是如何增加的感到困惑。

打印的顺序是相同的。它们的递归定义如下:
a\u n=a\u(n-1)+a\u(n-2)
。在代码片段中,
p
扮演
a(n-2)
q
扮演
a(n-1)
。想象一下,从右到左打印的序列上叠加了一个滑动窗口(
r,q,p
)。在每次迭代中,窗口向左移动一步。
lpad
函数将字符串填充到给定长度。您可以选择添加第三个参数,即填充字符(默认为
)。注意,有一个同级函数
rpad
。但是,如果在课堂上讨论过代码,您可能知道这一点。

@DaBulls33请在下面找到您需要的解决方案

DECLARE
    p NUMBER := 0;
    q NUMBER := 1;
    r NUMBER;
BEGIN
    DBMS_OUTPUT.PUT_LINE(LPAD('0: ', 4) || LPAD(p, 10)); 
    DBMS_OUTPUT.PUT_LINE(LPAD('1: ', 4) || LPAD(q, 10)); 
    FOR k IN 2..20 LOOP 
        r := p + q;
            DBMS_OUTPUT.PUT_LINE(LPAD(k, 2) || ': ' || LPAD(r, 10)); 
            p := q;
            q := r;
    END LOOP;
END;

哪一部分让你困惑,伙计?还是整个密码都在头上?具体到
中,所以
。好的,我现在得到斐波那契数是前两个数在下一个数之前的总和。如何显示Fn-3、Fn和Fn+3?这是否意味着每次递增3?我如何才能使循环从30开始,到80结束,而不显示不在该范围内的数字?@DaBulls33我给出了解决方案
DECLARE
p NUMBER := 0;
q NUMBER := 1;
r NUMBER;
BEGIN
FOR k IN 2..80 LOOP 
    r := p + q;
     IF K >29 THEN
      DBMS_OUTPUT.PUT_LINE(LPAD(k, 2) || ': ' || LPAD(r, 10));
      END IF;
        p := q;
        q := r;
END LOOP;
END;