Oracle PL/SQL集合的delete方法(挑战题编号000004)
首先创建一个包头:
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挑战