首页 > PL/SQL挑战 > Oracle PL/SQL集合的delete方法(挑战题编号000004)

Oracle PL/SQL集合的delete方法(挑战题编号000004)

2015年4月8日 发表评论 阅读评论

 首先创建一个包头:

CREATE OR REPLACE PACKAGE plch_pkg

IS

   TYPE numbers_t IS TABLE OF NUMBER

      INDEX BY PLS_INTEGER;

END;

/

四个选项分别创建了四个存储过程PLCH_REMOVE_EVENS,哪个选项创建的存储过程可以在执行以下代码后屏幕显示”50”

DECLARE

   l_numbers   plch_pkg.numbers_t;

BEGIN

   FOR indx IN 1 .. 100

   LOOP

      l_numbers (indx) := indx;

   END LOOP;


   plch_remove_evens (l_numbers);

   DBMS_OUTPUT.put_line (l_numbers.COUNT);

END;

/

选项1

CREATE OR REPLACE PROCEDURE plch_remove_evens (

   numbers_io   IN OUT plch_pkg.numbers_t)

IS

   l_numbers   plch_pkg.numbers_t;

BEGIN

   FOR indx IN 1 .. numbers_io.COUNT

   LOOP

      IF MOD (indx, 2) <> 0

      THEN

         l_numbers (indx) := numbers_io (indx);

      END IF;

   END LOOP;


   numbers_io := l_numbers;

END;

/

选项2

CREATE OR REPLACE PROCEDURE plch_remove_evens (

   numbers_io   IN OUT plch_pkg.numbers_t)

IS

BEGIN

   FOR indx IN 1 .. numbers_io.COUNT

   LOOP

      IF MOD (indx, 2) = 0

      THEN

         numbers_io.delete (indx);

      END IF;

   END LOOP;

END;

/

选项3

CREATE OR REPLACE PROCEDURE plch_remove_evens (

   numbers_io   IN OUT plch_pkg.numbers_t)

IS

BEGIN

   FOR indx IN 1 .. numbers_io.COUNT

   LOOP

      numbers_io (CASE MOD (indx, 2) 

                   WHEN 0 THEN -1 ELSE 1 END * indx) :=

         numbers_io (indx);

   END LOOP;


   numbers_io.delete (-2 ** 31 + 1, 0);

END;

/

选项4

CREATE OR REPLACE PROCEDURE plch_remove_evens (

   numbers_io   IN OUT plch_pkg.numbers_t)

IS

BEGIN

   numbers_io.delete (1, MOD (numbers_io.COUNT, 2));

END;

/

 

答案:http://www.anguora.com/plsql挑战答案/

 

分类: PL/SQL挑战 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.