0

我必须创建一个 PL/SQL 块,以便在我必须创建的名为 TEN_MULTIPLES 的表中插入 10 到 100 个 10 的倍数...(SCHEMA -> TEN_MULTIPLES(numbervalue))。我只需要在表格中插入 10、20、30、...、100,但不包括 50 和 90。到目前为止,我已经这样做了......对吗?

DECLARE  
  CREATE TABLE ten_multiples
     (numbervalue NUMBER (3));
BEGIN
  FOR i IN 9..101 LOOP
      IF (i = 50 OR i = 90) THEN
      ELSIF (i%10 = 0) THEN
         INSERT INTO ten_multiples
          VALUE (i);
      END IF;
  END LOOP;
END;

当我使用 10..100 时,是否包含 10 和 100 并在循环中评估为“i”?

我还需要使用游标从该表中找到最大数字,因此在本例中为 100,将其存储在 DECLARE 部分中声明的变量“num”中并打印出来......

DECLAR
   CURSOR my_cursor IS
    SELECT MAX(v_number) FROM ten_multiples;
   num NUMBER;
BEGIN
  OPEN my_cursor;
    FETCH my_cursor INTO (num);
    DBMS_OUTPUT.PUT_LINE(‘Maximum number is ‘ | num);
  CLOSE my_cursor;
END;

这是正确的吗?

我真的提前谢谢你:)

4

2 回答 2

4

为什么这么多 PL/SQL 课程都包含如何使用 PL/SQL 的练习?

insert into ten_multiples
with data as ( select level*10 as mult
               from dual
               connect by level <=10)
select * from data
where mult not in (50,90)
/
于 2013-05-11T07:09:47.730 回答
1

第一部分:

  • 您不能直接在 PL/SQL 上下文中执行 CREATE TABLE 语句。如果必须在 PL/SQL 上下文中执行,则必须通过 EXECUTE IMMEDIATE 命令使用 DBMS_DDL 包或动态 SQL。
  • 是的,包括 for 循环中的数字文字。

第二部分:

  • DECLARE不使用DECLAR
  • 您的SELECT成员必须是表格的一列,而不是v_number.
  • 您的单引号字符不正确,请使用 ',而不是 '。
  • 使用双管连接,而不是单管。

最后:

  • 实际通过 SQL*Plus 运行这些命令并收听该工具。
  • 尝试是你的朋友。
于 2013-05-10T22:05:45.867 回答