Oracle对象和方法存在一些问题
您好,我是Oracle新手,在编译时遇到一些错误,例如: 1 ORA-06545:PL/SQL:编译错误-编译已中止 ORA-06550:第13行第1列: PLS-00103:遇到符号“创建” ORA-06550:第0行第0列: PLS-00565:个人必须作为潜在参考目标(对象类型)填写C:\Users\GV\Documents\School\ex3.sql 6 1 我想做的是创建一个类Person,它包含他的个人数据(姓名、地址、电话号码、电子邮件)和两个方法一个检测电话号码是否只是数字,另一个检测电子邮件字符串中是否有@Oracle对象和方法存在一些问题,oracle,Oracle,您好,我是Oracle新手,在编译时遇到一些错误,例如: 1 ORA-06545:PL/SQL:编译错误-编译已中止 ORA-06550:第13行第1列: PLS-00103:遇到符号“创建” ORA-06550:第0行第0列: PLS-00565:个人必须作为潜在参考目标(对象类型)填写C:\Users\GV\Documents\School\ex3.sql 6 1 我想做的是创建一个类Person,它包含他的个人数据(姓名、地址、电话号码、电子邮件)和两个方法一个检测电话号码是否只是数字,另
create or replace type Person as object (
--variables
name varchar(10),
address varchar(50),
--methods
member function pNum (phone number) return self as result,
member function m (mail varchar) return self as result
) not final;
--body of methods
create or replace
type Persona as
member function pNum (phone number) return self as result as
begin
if( phone is not number ) then
RAISE_APPLICATION_ERROR( -20122,'phone can only have numbers' );
end;
member function m (mail varchar) return self as result as
begin
if( mail contains('@') ) then
RAISE_APPLICATION_ERROR( -20122,'not a email' );
end;
所以我的问题是
为什么我在创建时会出现错误
及
我的方法正确吗
::::::::::[UPDATE]:::::::::::::::::::::::::::::::::::::::
我已经设法修复了所有错误,但现在我需要一个if语句来检查电话号码中是否只有号码,电子邮件中是否有@字符串
更新代码:
---------------------CLASS-----------------------------
create or replace type Person as object (
--variables
name varchar(10),
address varchar(50),
--methods
member function pNum (phone number) return varchar2,
member function ml (mail varchar) return varchar2
) not final;
/
-----------------------BODY----------------------------------
create or replace type BODY Person as
member function pNum (phone number) return varchar2 as
begin
--if statement that detects if var phone is a number goes here
--if( phone is not number ) then
return 'phone can only have numbers';
end pNum;
member function ml (mail varchar) return varchar2 as
begin
--if statement that detects if var mail has a @ character goes here
--if( mail contains('@') ) then
return 'not a email';
end ml;
end;
/
--------------RUN TEST----------------------------------
DECLARE
a Person;
begin
a := Person(1,2);
dbms_output.put_line('Phone: ' || a.pNum(1152795927));
end;
你必须坚持正确的语法。首先,您定义了正确的类型
Person
然后你尝试创建它的定义,这里是你弄错的地方。必须将其定义为具有相同名称的类型主体。您定义了Person并尝试为Person创建主体:
create or replace type Person as object (
--variables
name varchar(10),
address varchar(50),
--methods
member function pNum (phone number) return self as result,
member function m (mail varchar) return self as result
) not final;
/
要指定正文,请执行以下操作:
create or replace type BODY Person as
member function pNum (phone number) return number as
begin
if( phone is not number ) then
RAISE_APPLICATION_ERROR( -20122,'phone can only have numbers' );
end if;
return phone;
end pNum;
member function m (mail varchar) return varchar as
begin
if( mail contains('@') ) then
RAISE_APPLICATION_ERROR( -20122,'not a email' );
end if;
return mail;
end m;
end;
/
基本上你用错误的方式定义了身体。我提供的代码可能有语法错误,因为我这里没有oracle来测试它。如果你发现了,请告诉我,我会修好的
编辑:函数必须返回类型。不能返回
SELF
,因为它是参数的定义。请参见此处的文档:因此我设法让它工作起来
下面的代码是一个类Person,它包含个人数据(例如:姓名、地址、电话号码、电子邮件)和两个方法一个用于检测电话号码是否仅为数字,另一个用于检测电子邮件字符串中是否有@
create or replace type Person as object (
--variables
name varchar(10),
address varchar(50),
--methods
member function pNum (phone number) return self as result,
member function m (mail varchar) return self as result
) not final;
--body of methods
create or replace
type Persona as
member function pNum (phone number) return self as result as
begin
if( phone is not number ) then
RAISE_APPLICATION_ERROR( -20122,'phone can only have numbers' );
end;
member function m (mail varchar) return self as result as
begin
if( mail contains('@') ) then
RAISE_APPLICATION_ERROR( -20122,'not a email' );
end;
已解析的代码:
---------------------Class Person-----------------------------
create or replace type Person as object (
--variables
name varchar(10),
address varchar(50),
--methods
member function pNum (phone number) return varchar2,
member function ml (mail varchar) return varchar2
) not final;
/
-----------------------Body of Methods----------------------------------
create or replace type BODY Person as
member function pNum (phone number) return varchar2 as
begin
if(mod(phone,1) != 0) then
return 'Phone number can only contain numbers';
end if;
return phone;
end pNum;
member function ml (mail varchar) return varchar2 as
begin
if (INSTR(mail, '@') != 0) then
return mail;
end if;
return 'That is not a email';
end ml;
end;
/
--------------Run Test----------------------------------
DECLARE
a Person;
begin
a := Person(1,2);
dbms_output.put_line('Phone: ' || a.pNum(1152.795927));
dbms_output.put_line('Email: ' || a.ml('armando@email.com'));
end;
你的权利我有人格而不是人格。但我仍然收到这个错误“3 PLS-00103:遇到符号“创建”3 PLS-00103:遇到符号“创建”。在第二天,我想我明白了。尝试我添加的编辑,您需要添加
/
来完成创建命令。lol现在我在方法的返回自我上都遇到错误,如果x包含('y')语法,则没有。您可能正在寻找之类的或instr()
。