2016-12-04 69 views
-1

我最近开始学习一些关于数据库的知识,并且我试图使它成为一个varchar2将被验证为在该值之前的所有字母字符(无数字或特殊字符)将被插入到数据库中。我似乎无法找到如何做到这一点,我有一个触发器和一个函数,但当我尝试插入一个包含特殊字符的字符串时,它允许它。我希望有人能帮助我,并且将不胜感激..在使用触发器插入之前验证PL SQL

我的代码如下...

CREATE OR REPLACE FUNCTION isAlpha (al IN VARCHAR2) RETURN CHAR IS 
BEGIN 
FOR i in 1..LENGTH(al) LOOP 
IF ASCII(SUBSTR(al, i, 1)) < 65 OR ASCII(SUBSTR(al, i, 1)) > 90 
THEN RETURN 'F'; 
END IF; 
END LOOP; 
RETURN 'T'; 
END isAlpha; 

CREATE OR REPLACE TRIGGER valid_name 
BEFORE INSERT OR UPDATE ON ACCOUNT 
FOR EACH ROW 
BEGIN 
IF (ISALPHA(:new.name) = 'F') THEN 
raise_application_error(-20001, 'Not valid name'); 
END IF; 
END; 

它编译罚款,但似乎并没有在运行时和我一起工作在Oracle SQL中相当新,所以我不确定如何调试。

+0

Mysql和sql server是oracle的不同产品。请注意您使用的标签! – Shadow

+0

https://www.techonthenet.com/oracle/questions/isalpha.php – OldProgrammer

+0

空格不是字母字符。我也希望自己的实现,而不是复制别人的工作。我试图学习语法。 – Feek

回答

0

对不起,这个愚蠢的问题。我的功能工作大写,当我试图插入insert into ACCOUNT (id, cid, name) VALUES (2, 4, 'Brent');它不会让我,因为我的函数将返回F当找到r上小写不起作用所以...

不管怎么说修复是IF (ISALPHA(UPPER(:new.name)) = 'F') THEN