我一直在学习本教程:https://www.youtube.com/watch?v=ngOm5uBP1uE&feature=emb_title。
我在所有代码后加上了所需的变量,它们如下:
-创建表格
CREATE TABLE "TB_USERS"
(
"S_ID" NUMBER GENERATED ALWAYS AS IDENTITY(START with 1 INCREMENT by 1),
"S_FNAME" varchar2(30) NOT NULL ENABLE,
"S_LNAME" varchar2(30) NOT NULL ENABLE,
"S_Password" varchar2(30) NOT NULL ENABLE,
"S_DOB" date NOT NULL ENABLE,
"EMAIL" varchar2(255) NOT NULL ENABLE,
PRIMARY KEY ("S_ID") USING INDEX ENABLE,
CONSTRAINT "USERS_U1" UNIQUE ("EMAIL") USING INDEX ENABLE
);
-创建加密功能
CREATE OR REPLACE FUNCTION ENCRYPT_PASSWORD
(
p_username in varchar2,
p_password in varchar2)
return varchar2
is
l_password varchar2(255);
l_salt varchar2(30) := 'RANDOM_SALT_STRING';
begin
l_password :=
DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => UPPER(p_username) || l_salt || UPPER(p_password));
return l_password;
end ENCRYPT_PASSWORD;
这两个sql脚本均已成功,但是在声明触发器时,它给我错误“ ORA-04070:无效的触发器名称ORA-06512:位于“ SYS.WWV_DBMS_SQL_APEX_200100 ”我为此脚本编写的代码是:
CREATE OR REPLACE TRIGGER 'TB_USERS_TRIGGER'
BEFORE INSERT ON TB_USERS
for each row
BEGIN
:new.EMAIL := upper(:new.EMAIL);
:new.s_fname := lower(:new.s_fname);
:new.s_password := ENCRYPT_PASSWORD(upper(:new.email), :new.s_password);
END;
/
Insert into TB_USERS ("EMAIL","S_Password") values ('VASCODIGAMA@GMAIL.COM','rainuma_16');
/
有什么想法我犯错或出错吗?
答案 0 :(得分:0)
我认为您应该一起删除双引号。
SQL> CREATE TABLE TB_USERS
(
S_ID NUMBER GENERATED ALWAYS AS IDENTITY(START with 1 INCREMENT by 1),
S_FNAME varchar2(30) NOT NULL ENABLE,
S_LNAME varchar2(30) NOT NULL ENABLE,
S_Password varchar2(30) NOT NULL ENABLE,
S_DOB date NOT NULL ENABLE,
EMAIL varchar2(255) NOT NULL ENABLE,
PRIMARY KEY (S_ID) USING INDEX ENABLE,
CONSTRAINT USERS_U1 UNIQUE (EMAIL) USING INDEX ENABLE
);
Table created.
SQL> CREATE OR REPLACE FUNCTION ENCRYPT_PASSWORD
(
p_username in varchar2,
p_password in varchar2)
return varchar2
is
l_password varchar2(255);
l_salt varchar2(30) := 'RANDOM_SALT_STRING';
begin
l_password :=
DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => UPPER(p_username) || l_salt || UPPER(p_password));
return l_password;
end ENCRYPT_PASSWORD;
/
Function created.
SQL> CREATE OR REPLACE TRIGGER TB_USERS_TRIGGER
BEFORE INSERT ON TB_USERS
for each row
BEGIN
:new.EMAIL := upper(:new.EMAIL);
:new.s_fname := lower(:new.s_fname);
:new.s_password := ENCRYPT_PASSWORD(upper(:new.email), :new.s_password);
END;
/
Trigger created.