2013-05-10 51 views
0

我必須創建一個PL/SQL塊來插入10到100的倍數10的表TEN_MULTIPLES,我必須創建...(SCHEMA - > TEN_MULTIPLES(numbervalue))。我將不得不在表格內插入10,20,30,...,100,但不包括50和90.到目前爲止,我已經這樣做了......是否正確?PL/SQL塊和LOOP練習

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包括和評估爲'我'在循環?

我也需要在這種情況下,100使用遊標,所以要找到從該表的最大數目,它存儲在一個變量「NUM」在DECLARE部分聲明,並打印出來......

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; 

這是正確的嗎?

我真的很感謝你提前:)

回答

1

第一部分:

  • 你不能在PL/SQL 背景下直接執行CREATE TABLE語句。如果必須在PL/SQL上下文中執行,則必須通過 EXECUTE IMMEDIATE命令使用DBMS_DDL包或動態SQL。
  • 包含for循環中的數字文字。

第二部分:

  • 使用DECLAREDECLAR
  • 您的SELECT成員必須是表格中的一列,而不是v_number
  • 您的單引號字符不正確,請使用',not'。
  • 使用雙管道連接,而不是單一。

最後:

  • 其實貫穿的SQL * Plus這些命令和聽工具。
  • 嘗試是你的朋友。
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) 
/