我是oracle數據庫的新手,特別是存儲過程。創建Oracle數據庫存儲過程來創建用戶帳戶和/或檢查帳戶是否已存在
我的主要目標是在創建表中的用戶之前檢查並確保帳戶(用戶名或電子郵件)尚不存在。
我遇到的問題是:執行過程時,沒有任何內容插入到數據庫中。 如果有人可以檢查此代碼並確保它是正確的,將有助於很多。
CREATE OR REPLACE PROCEDURE A2PROXYCREATEUSER (
in_name IN VARCHAR2
, in_password IN VARCHAR2
, in_email IN VARCHAR2
, in_subscript IN NUMBER DEFAULT 1
, customaction IN VARCHAR2
, userdata IN VARCHAR2
, userdatalen IN NUMBER
, returncode OUT NUMBER)
AS
CodeSuccess constant number := 0;
CodeAlreadyExists constant number := 1;
CodeInvalidUserName constant number := 2;
CodeAccountCreationDisabled constant number := 3;
CodeInvalidPassword constant number := 4;
CodeKeyInUser constant number := 10;
CodeInvalidKey constant number := 11;
current_name VARCHAR2(32);
current_email varchar2(12);
wonidseq number;
BEGIN
wonidseq := 0;
returncode := CodeSuccess;
SELECT NAME
INTO current_name
FROM WONUSER
WHERE NAME = in_name;
returncode := CodeAlreadyExists;
-- If the first SELECT statement above fails to return any
-- records at all, then the NO_DATA_FOUND exception will be
-- signalled. The following code reacts to this exception
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
SELECT EMAIL
INTO current_email
FROM WONUSER
WHERE EMAIL = in_email;
returncode:=CodeAlreadyExists;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
SELECT UNIQUEID_SEQ.nextval into wonidseq from WONUSER;
INSERT INTO WONUSER(WONUSERSEQ, NAME, PASSWORD, NEWPASSWORD, EMAIL, TRUSTLEVEL, COMMUNITYSEQ, ISBANNED, ISACTIVE)
VALUES(wonidseq, in_name, in_password, NULL, in_email, 120, 0, 0, 1);
returncode := CodeSuccess;
end;
END;
if returncode = CodeSuccess then
commit;
else
rollback;
end if;
END;
編輯:
我設法修復代碼(可能看起來像一個黑客的人誰知道語法井)
create or replace
PROCEDURE A2PROXYCREATEUSER (
in_name IN VARCHAR2
, in_password IN VARCHAR2
, in_email IN VARCHAR2
, in_subscript IN NUMBER DEFAULT 1
, customaction IN VARCHAR2
, userdata IN VARCHAR2
, userdatalen IN NUMBER
, returncode OUT NUMBER)
AS
CodeSuccess constant number := 0;
CodeAlreadyExists constant number := 1;
CodeInvalidUserName constant number := 2;
CodeInvalidEmail constant number := 7;
CodeAccountCreationDisabled constant number := 3;
current_name VARCHAR2(32);
current_email varchar2(12);
wonidseq number;
BEGIN
SELECT LoginName into current_name from WONUSER WHERE loginname = in_name;
returncode := CodeAlreadyExists;
exception
when NO_DATA_FOUND then
returncode := CodeSuccess;
if returncode = CodeSuccess then
BEGIN
SELECT EMAIL into current_email from WONUSER where EMAIL = in_email;
returncode := CodeAlreadyExists;
exception
when NO_DATA_FOUND then
returncode := CodeSuccess;
INSERT INTO WONUSER (WONUSERSEQ, LOGINNAME, PASSWORD, NEWPASSWORD, EMAIL, TRUSTLEVEL, COMMUNITYSEQ, ISBANNED, ISACTIVE,birthdate)
VALUES(wonidseq, in_name, in_password, ' ', in_email, 120, 0, 0, 1, sysdate);
commit;
end;
else
rollback;
end if;
end;
那麼,你是否像一個調試器,像SQLDeveloper一樣? – OldProgrammer