检查 Oracle 11G 中数字和字符的字符串
Check string for numbers and characters in Oracle 11G
我正在做某事。我必须检查一个字符串以进行验证。这个字符串有一个国家代码和一个大学代码(来自他们自己的数据库表)和一串数字。现在我需要验证这个字符串。我需要检查国家代码和大学代码上的这个字符串,如果它有数字是或否。
目前我已经尝试了很多东西。我尝试使用很多 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)。如果结果为真或经过验证 returns 1 否则 0.
希望我的问题不要太含糊。
如果有人能向我解释我需要什么样的功能和步骤make/take,那就太棒了
提前致谢
好的,我不太清楚您在做什么,但以下内容可能会有所帮助。从数据
创建 table
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 语句结合使用,将您的单词转换为行。
select REGEXP_SUBSTR (txt, '[^ ]+', 1, level) val from mytable connect by level <= regexp_count(txt,' ') + 1;
这会给你四行
NL
4633
4809
KTU
可能低于 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;
/
我正在做某事。我必须检查一个字符串以进行验证。这个字符串有一个国家代码和一个大学代码(来自他们自己的数据库表)和一串数字。现在我需要验证这个字符串。我需要检查国家代码和大学代码上的这个字符串,如果它有数字是或否。
目前我已经尝试了很多东西。我尝试使用很多 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)。如果结果为真或经过验证 returns 1 否则 0.
希望我的问题不要太含糊。
如果有人能向我解释我需要什么样的功能和步骤make/take,那就太棒了
提前致谢
好的,我不太清楚您在做什么,但以下内容可能会有所帮助。从数据
创建 tablecreate 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 语句结合使用,将您的单词转换为行。
select REGEXP_SUBSTR (txt, '[^ ]+', 1, level) val from mytable connect by level <= regexp_count(txt,' ') + 1;
这会给你四行
NL
4633
4809
KTU
可能低于 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;
/