【发布时间】:2015-07-30 11:05:12
【问题描述】:
我正在做某事。我必须检查一个字符串以进行验证。这个字符串有一个国家代码和一个大学代码(来自他们自己在数据库中的表)和一堆数字。现在我需要验证这个字符串。我需要检查国家代码和大学代码上的这个字符串,如果它有数字是或否。
目前我已经尝试了很多东西。我尝试使用很多 if 语句、regexp_like、instr、substr、select 语句等。但我无法检查字符串的国家和大学代码(以及是否有匹配的数字)。
我现在的代码如下:
create or replace function checkForCorrectness (
isin varchar2)
return integer
as
isCorrect integer := 0;
checkISIN varchar2(50);
checkCountryCode country.code%type;
checkUniversityCode university.code%type;
e_onbekendeLandCode exception;
e_onbekendeUniCode exception;
e_lengteNummer exception;
begin
--checkISIN := isin;
/*
if checkISIN like '%NL%'
then dbms_output.put_line('Beschikt over een landcode');
if checkISIN like '%KTU%'
then dbms_output.put_line('Beschikt over een universiteit code');
if checkISIN like ''
then dbms_output.put_line('Beschikt over een nummerreeks');
end if;
end if;
end if;
*/
--select isin
--into checkISIN
--from dual
--where regexp_like(checkISIN, '^[[:digit:]]+$');
isin := regexp_like(isin, '[[:digit:]]');
dbms_output.put_line(checkISIN);
return isCorrect;
exception
when e_lengteNummer
then dbms_output.put_line('Foutmelding: Nummereeks is kleiner dan 9');
when e_onbekendeLandCode
then dbms_output.put_line('Foutmelding: Landcode is niet geldig of bestaat niet');
when e_onbekendeUniCode
then dbms_output.put_line('Foutmelding: Universiteit code is niet geldig of bestaat niet');
end checkForCorrectness;
/
show errors function checkForCorrectness
/*
begin
dbms_output.put_line(checkForCorrectness('NL 4633 4809 KTU'));
end;
现在我很困惑,我什至不知道该怎么办了。我希望你们中的一些人可以帮助我。
长话短说。我得到了这个检查值(以及更多):
ASSERT_EQUALS(checkForCorrectness('NL 4633 4809 KTU'),1);
ASSERT_EQUALS(checkForCorrectness('NL 4954 2537 7808 MSM'),1);
输入是一个字符串,其中包含国家代码 (NL)、数字 (4633 4809) 和大学代码 (KTU)。如果结果为真或通过验证,则返回 1,否则返回 0。
希望我的问题不要太含糊。
如果有人可以向我解释我需要制作/采取什么样的功能和步骤,那就太棒了
提前致谢
【问题讨论】:
-
所有国家代码都是两个字符吗?所有大学代码都是三个字符吗?国家代码和大学代码之间是否允许除空格和数字以外的任何字符?对它们的组装方式是否有任何限制(即
NL 4 9 5 425 MSM是否有效)?还是数字总是以 4 个一组出现?您是否尝试根据查找表验证国家和大学代码?或者只是检查它们分别是两个和三个字母代码? -
国家和大学代码可能超过 2 或 3 个字符。因为数字是必须的 4 对(直到不可能)。我不知道检查国家和大学代码的最佳方法是什么,但我想从他们自己的表格中检查这两个(如果可能的话)
-
好的。那么,您想要执行的规则到底是什么? 1 个或多个字母后跟一个空格,后跟 1 个或更多组四个连续数字,后跟一个空格,后跟 1 个或多个字母?读到第一个空格总是可以解析出国家代码,读到最后一个空格可以解析出大学代码吗?
-
就我的测试表而言,国家/地区代码的长度可能会有所不同,但始终位于前面。大学代码的长度也可能不同,但始终位于代码的末尾。在中间,数字可能会因长度而异,但它们需要尽可能地以 4 配对。 3 个值之间总是有一个空格。我需要将测试表中的 ISIN 字符串放入函数中。从那里我需要检查表格中是否存在国家和大学代码,最后我需要检查是否至少有 8 位数字。抱歉英语不好
-
“尽可能4配对”是什么意思?是否存在数字不成对出现 4 的情况?围绕它的规则是什么?国家代码是否总是可以通过读取到第一个空格来解析出来,而大学代码可以通过读取最后一个空格来解析出来吗?它们总是出现在开头和结尾,但它们总是跑到第一个空格并从最后一个空格开始吗?
标签: regex string oracle oracle11g numbers