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挑战