关联数组:索引值为负值(挑战题编号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挑战