我正在做点什么。我要检查一个字符串进行验证。这个字符串有一个国家代码和一个大学代码(来自他们自己在数据库中的表)和一堆数字。现在我需要验证这个字符串。我需要在国家/地区代码和大学代码上检查此字符串,是否有数字是或否。
此刻我尝试过很多东西。我试图使用很多if语句,regexp_like,instr,substr,select语句等。但我无法检查字符串的国家和大学代码(如果它有匹配的数字)。
目前我的代码如下:
Error in setcolorder(ans, c(xcols1, ycols, xcols2)) :
neworder is length 16 but x has 18 columns.
此刻我很困惑,我甚至不知道该怎么做。我希望你们中的一些人可以帮助我。
长话短说。我得到了这个检查值(以及更多):
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;
输入是一个字符串,其中包含国家/地区代码(NL),数字(4633 4809)和大学代码(KTU)。如果结果为true或验证结果为1,则返回0。
我希望我的问题不要太模糊。
如果有人能向我解释我需要制作/采取什么样的功能和步骤,那就太棒了
提前致谢
答案 0 :(得分:1)
好吧我不清楚你在做什么,但是以下可能会有所帮助。从数据
创建表create table mytable as select 'NL 4633 4809 KTU' txt from dual;
您可以使用正则表达式将单词拆分为列
SELECT REGEXP_SUBSTR (txt, '[^ ]+', 1, 1) AS part_1
, REGEXP_SUBSTR (txt, '[^ ]+', 1, 2) AS part_2
, REGEXP_SUBSTR (txt, '[^ ]+', 1, 3) AS part_3
, REGEXP_SUBSTR (txt, '[^ ]+', 1, 4) AS part_4
FROM mytable;
这将为您提供4列,并将您的单词拆分。
part1 part2 part3 part4
NL 4633 4809 KTU
或者您可以使用带有connect by语句的regexp将您的单词转换为行。
select REGEXP_SUBSTR (txt, '[^ ]+', 1, level) val from mytable connect by level <= regexp_count(txt,' ') + 1;
这会给你四行
NL
4633
4809
KTU
答案 1 :(得分:0)
可能在sql块代码下面有助于获得你想要的输出....
set serveroutput on
Declare
vStr Varchar2(100);
iB Number := 0;
Begin
vStr := 'NL 4633 4809 KTU';
select distinct 1
into iB
from country where name = Substr(vStr,1,2);
if iB = 1 then
dbms_output.put_line('country is legit');
end if;
select distinct 1
into iB
from university where name = Substr(vStr,length(vStr)-2,3);
if iB = 1 then
dbms_output.put_line('uni. is legit');
end if;
End;
/