PL / SQL块和LOOP练习

时间:2013-05-10 18:08:25

标签: sql oracle plsql cursor block

我必须创建一个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'?

我还需要使用游标从该表中找到MAXIMUM数字,所以在这种情况下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;

这是对的吗?

我真的非常感谢你:)

2 个答案:

答案 0 :(得分: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)
/

答案 1 :(得分:1)

第一部分:

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

第二部分:

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

最后:

  • 实际上通过SQL * Plus运行这些命令并听取该工具。
  • 尝试是你的朋友。