关联数组:索引值为负值(挑战题编号000001)
问题:哪个选项创建的包使下面的代码执行完后显示"Count=5”
CREATE OR REPLACE PROCEDURE plch_mark_for_deletion ( list_io IN OUT NOCOPY plch_pkg.list_t) IS BEGIN FOR indx IN 1 .. list_io.COUNT LOOP IF MOD (indx, 2) = 0 THEN list_io (-1 * indx) := list_io (indx); list_io.delete (indx); END IF; END LOOP; END; / DECLARE l_list plch_pkg.list_t := plch_pkg.initialize (); BEGIN plch_mark_for_deletion (l_list); FOR indx IN l_list.FIRST .. -1 LOOP l_list.delete (indx); END LOOP; DBMS_OUTPUT.put_line ('Count = ' || l_list.COUNT); END; /
选项1:
CREATE OR REPLACE PACKAGE plch_pkg IS TYPE list_t IS TABLE OF INTEGER INDEX BY PLS_INTEGER; FUNCTION initialize RETURN list_t; END; / CREATE OR REPLACE PACKAGE BODY plch_pkg IS FUNCTION initialize RETURN list_t IS l_list list_t; BEGIN SELECT LEVEL BULK COLLECT INTO l_list FROM DUAL CONNECT BY LEVEL < 10; RETURN l_list; END; END; /
选项2:
CREATE OR REPLACE PACKAGE plch_pkg IS TYPE list_t IS TABLE OF INTEGER; FUNCTION initialize RETURN list_t; END; / CREATE OR REPLACE PACKAGE BODY plch_pkg IS FUNCTION initialize RETURN list_t IS l_list list_t; BEGIN SELECT LEVEL BULK COLLECT INTO l_list FROM DUAL CONNECT BY LEVEL < 10; RETURN l_list; END; END; /
选项3
CREATE OR REPLACE PACKAGE plch_pkg IS TYPE list_t IS VARRAY(10) OF INTEGER; FUNCTION initialize RETURN list_t; END; / CREATE OR REPLACE PACKAGE BODY plch_pkg IS FUNCTION initialize RETURN list_t IS l_list list_t; BEGIN SELECT LEVEL BULK COLLECT INTO l_list FROM DUAL CONNECT BY LEVEL < 10; RETURN l_list; END; END; /
选项4:
CREATE OR REPLACE PACKAGE plch_pkg IS TYPE list_t IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100); FUNCTION initialize RETURN list_t; END; / CREATE OR REPLACE PACKAGE BODY plch_pkg IS FUNCTION initialize RETURN list_t IS l_list list_t; BEGIN SELECT LEVEL BULK COLLECT INTO l_list FROM DUAL CONNECT BY LEVEL < 10; RETURN l_list; END; END; /
答案:http://www.anguora.com/plsql挑战答案/
分类: PL/SQL挑战