Создать пакет с функцией и процедурой из задачи “Процедура с OUT параметрами”.
Пакеты в Oracle создаются для группировки объектов по тематике использования.
Создадим заголовок пакета:
CREATE OR REPLACE PACKAGE KK_PKG1 IS
FUNCTION KK_F(IN_STR IN VARCHAR2, IN_CHAR IN CHAR) RETURN INTEGER;
PROCEDURE KK_P(IN_LASTNAME IN VARCHAR2,
IN_FIRSTNAME IN VARCHAR2,
OUT_NUM_A_IN_LASTNAME OUT INTEGER,
OUT_NUM_B_IN_FIRSTNAME OUT INTEGER);
END KK_PKG1;
Создадим тело пакета:
CREATE OR REPLACE PACKAGE BODY KK_PKG1 IS
FUNCTION KK_F(IN_STR IN VARCHAR2, IN_CHAR IN CHAR) RETURN INTEGER IS
RES INTEGER;
BEGIN
RES := 0;
FOR I IN 1 .. LENGTH(IN_STR) LOOP
IF SUBSTR(IN_STR, I, 1) = IN_CHAR THEN
RES := RES + 1;
END IF;
END LOOP;
RETURN RES;
END KK_F;
PROCEDURE KK_P(IN_LASTNAME IN VARCHAR2,
IN_FIRSTNAME IN VARCHAR2,
OUT_NUM_A_IN_LASTNAME OUT INTEGER,
OUT_NUM_B_IN_FIRSTNAME OUT INTEGER) IS
BEGIN
OUT_NUM_A_IN_LASTNAME := KK_PKG1.KK_F(UPPER(IN_LASTNAME), 'А');
OUT_NUM_B_IN_FIRSTNAME := KK_PKG1.KK_F(UPPER(IN_FIRSTNAME), 'Б');
END KK_P;
END KK_PKG1;
Проверим работу:
declare
n1 integer := 0;
n2 integer := 0;
begin
DBMS_OUTPUT.enable;
KK_PKG1.kk_p('Анатольев', 'Борис', n1, n2);
DBMS_OUTPUT.put_line('Анатольев Борис ' || n1 || ' ' || n2);
KK_PKG1.kk_p('Робин', 'Барабек', n1, n2);
DBMS_OUTPUT.put_line('Робин Барабек ' || n1 || ' ' || n2);
KK_PKG1.kk_p('Атанбаев', 'Ибрагим', n1, n2);
DBMS_OUTPUT.put_line('Атанбаев Ибрагим ' || n1 || ' ' || n2);
end;
Задача. Разные виды Count.