Я пытаюсь создать пакет (user_mgt) в SCHEME1, где он вызывает процедуру (change_pwd) и функцию (check_password) из SCHEME2.Я не совсем уверен, как правильно определить параметры и переменные, которые существуют в процедуре и функции.Нужно ли как-то соединять эти две схемы?Очень хотелось бы несколько советов!
CREATE OR REPLACE PACKAGE user_mgmt AS
PROCEDURE CHANGE_PWD (P_USERNAME IN USERS.USERNAME %TYPE,
P_OLD_PW USERS.PASSWORD%TYPE,
P_NEW_PW IN USERS.PASSWORD %TYPE,
P_SUCCES OUT BOOLEAN );
FUNCTION check_password
(P_USERNAME IN VARCHAR2,
P_PASSWORD IN VARCHAR2)
RETURN BOOLEAN IS
V_CHECK NUMBER(1);
end user_mgmt;
/
CREATE OR REPLACE PACKAGE BODY user_mgmt AS
PROCEDURE CHANGE_PWD (P_USERNAME IN USERS.USERNAME %TYPE,
P_OLD_PW IN USERS.PASSWORD%TYPE,
P_NEW_PW IN USERS.PASSWORD%TYPE,
P_SUCCES OUT BOOLEAN ) IS
VC_OLD_PW USERS.PASSWORD%TYPE;
BEGIN
SELECT U.PASSWORD
INTO VC_OLD_PW
FROM USERS U
WHERE U.USERNAME = p_username;
IF VC_OLD_PW = P_OLD_PW THEN
UPDATE USERS
SET PASSWORD = p_new_pw
WHERE USERS.USERNAME = p_username;
COMMIT;
P_SUCCES := TRUE;
ELSE
P_SUCCES := FALSE;
END IF;
EXCEPTION
WHEN OTHERS THEN
P_SUCCES := FALSE;
DBMS_OUTPUT.PUT_LINE('Error in procedure CHANGE_PWD '||SQLERRM);
END CHANGE_PWD;
FUNCTION check_password (P_USERNAME IN VARCHAR2,
P_PASSWORD IN VARCHAR2)
RETURN BOOLEAN IS
V_CHECK NUMBER(1);
BEGIN
SELECT 1 INTO V_CHECK
FROM USERS
WHERE UPPER(P_USERNAME) = UPPER(USERS.USERNAME)
AND (P_PASSWORD) = (USERS.PASSWORD);
RETURN TRUE;
EXCEPTION
WHEN NO_DATA_FOUND THEN return false;
WHEN OTHERS THEN return false;
End check_password;
END user_mgmt;