PL/SQL练习题——plsqlAdd_Prac,Part A,1-12

  本人最近在学PL/SQL,闲来无事做了一套练习题,写了点笔记,供大家参考。


 PL/SQL练习题——plsqlAdd_Prac,Part A,1-12

  第一题,要求选出不合法的声明。A多余声明,C缺少冒号,D类型不匹配,只有B是正确的的。


 PL/SQL练习题——plsqlAdd_Prac,Part A,1-12

  第二题,要求给出变量类型。答案如下,不多解释。

    a. CHAR / VARCHAR2

    b. DATE

    c. NUMBER

    d. BOOLEAN

    e. BOOLEAN

    f. DATE


 PL/SQL练习题——plsqlAdd_Prac,Part A,1-12

PL/SQL练习题——plsqlAdd_Prac,Part A,1-12

  第三题,要求分别给出在1和2位置,每个变量的取值。这里要注意每个变量的作用域,看清楚一个匿名块里套着另一个匿名块,以及匿名块的范围,很容易得到答案。

  我的测试代码如下:

DECLARE 
v_custid NUMBER(4) := 1600;
v_custname VARCHAR2(300) := 'Women Sports Club';
v_new_custid NUMBER(3) := 500;
BEGIN
  DECLARE
    v_custid NUMBER(4) := 0;
    v_custname  VARCHAR2(300) := 'Shape up Sports Club';
    v_new_custid  NUMBER(3) := 300;
    v_new_custname  VARCHAR2(300) := 'Jansports Club';
  BEGIN
    v_custid := v_new_custid;
    v_custname := v_custname || ' ' || v_new_custname;
    DBMS_OUTPUT.put_line('(1) ' || v_custid || '——' || v_custname || '——' ||
                                   v_new_custid || '——' || v_new_custname);
  END;
  DBMS_OUTPUT.put_line('(2) ' || v_custid || '——' || v_custname || '——' ||
                                 v_new_custid);
  v_custid := (v_custid * 12) / 10;  
END; 

  屏幕上的输出如图:

PL/SQL练习题——plsqlAdd_Prac,Part A,1-12

  因此,可以得出答案:

  a. The value of V_CUSTID at position 1 is: 300

  b. The value of V_CUSTNAME at position 1 is: Shape up Sports Club Jansports Club

  c. The value of V_NEW_CUSTID at position 2 is: 500

  d. The value of V_NEW_CUSTNAME at position 1 is: Jansports Club

  e. The value of V_CUSTID at position 2 is: 1920

  f. The value of V_CUSTNAME at position 2 is: Women Sports Club


 PL/SQL练习题——plsqlAdd_Prac,Part A,1-12

PL/SQL练习题——plsqlAdd_Prac,Part A,1-12

  第四题,要求写一个匿名块,根据输入的年份判断是否是闰年。

  输入使用替代变量,IF...THEN的条件判断不多说,这里提一下那一长串的条件。

  判断闰年的标准是:(1) 能被4整除且不被100整除;(2) 能被400整除。条件(1)中是通过AND连接的,条件(2)是通过OR连接的。初步确定条件应该这么写:

  ((= 4 AND <> 100) OR (= 400))

  由于AND的优先级是高于OR的(即使平级,在这道题里也是相同的做法),这里可以省去一层括号,即(= 4 AND <> 100 OR = 400)。

  给出代码如下,测试通过。

DECLARE
v_year INTEGER(4);
BEGIN
  v_year := '&请输入年份:';
  -- AND的优先级是高于OR的,因此执行的顺序是((= 4 AND <> 100) OR = 400)
  IF MOD(v_year, 4) = 0 AND MOD(v_year, 100) <> 0 OR MOD(v_year, 400) = 0 THEN
    DBMS_OUTPUT.put_line(v_year || ' is a leap year.');
  ELSE 
    DBMS_OUTPUT.put_line(v_year || ' is not a leap year.');
  END IF;
END;

 

上一篇:PowerShell yarn : 无法加载文件 C:\Users\Admin\AppData\Roaming\npm\yarn.ps1,因为在此系统因为在此系统上禁止运行脚本。


下一篇:E. Maximize Mex