Oracle SQL Concat 困扰
Oracle SQL Concat troubled
我有这个:
CREATE or replace TYPE type_movie AS object(
idmovie numeric(6),
title varchar(50),
genere varchar(20),
year numeric(4),
refprojec ref type_projec,
MEMBER FUNCTION getProjec1 return numeric
);
和
CREATE or replace TYPE type_projec AS object(
idmovie numeric(6),
date date,
hour char(5),
refmovie ref type_movie,
MEMBER FUNCTION getData return varchar
);
create table tmovie of type_movie;
create table tprojec of type_projec;
那么,问题:
create or replace TYPE BODY type_projec AS
MEMBER FUNCTION getData return varchar is
all varchar;
BEGIN
SELECT concat(to_char(t.idmovie) || t.title || t.genere || to_char(t.year)) INTO all
FROM tmovie t
WHERE t.refmovie.idmovie=self.idmovie;
return all;
END;
END;
我想将所有选定的项目连接到 return 所有项目的唯一 varchar。
SELECT concat(to_char(t.idmovie) || t.title || t.genere || to_char(t.year)) INTO all
行好像有错误
但据说 all
似乎是正确的?
有可能的答案吗?
"But supposedly all
seems correct?"
到一定程度。
ALL
是一个 Oracle 保留字,所以它是一个糟糕的变量名选择。使用其他东西,甚至 l_all
,而不是。
CONCAT() 有两个参数;你只提供一个。由于您正在使用 ||
连接运算符,因此您不需要调用 CONCAT()。这会起作用
SELECT to_char(t.idmovie) || t.title || t.genere || to_char(t.year) INTO l_all
另外,引用类型的语法是错误的。这将编译...
WHERE t.idmovie=self.idmovie;
...但它可能不是你想要实现的。
ALL
和 DATE
是保留字——您想使用其他名称代替这些名称。您不需要使用 CONCAT(str1,str2)
(并且您只提供一个参数),因为您使用的是 ||
连接运算符。
你可以直接使用 DEREF()
:
create or replace TYPE BODY type_projec AS
MEMBER FUNCTION getData return varchar is
str varchar(4000);
BEGIN
SELECT DEREF( self.refmovie ).idmovie
|| DEREF( self.refmovie ).title
|| DEREF( self.refmovie ).genere
|| DEREF( self.refmovie ).year
INTO str
FROM DUAL;
return str;
END;
END;
/
我有这个:
CREATE or replace TYPE type_movie AS object(
idmovie numeric(6),
title varchar(50),
genere varchar(20),
year numeric(4),
refprojec ref type_projec,
MEMBER FUNCTION getProjec1 return numeric
);
和
CREATE or replace TYPE type_projec AS object(
idmovie numeric(6),
date date,
hour char(5),
refmovie ref type_movie,
MEMBER FUNCTION getData return varchar
);
create table tmovie of type_movie;
create table tprojec of type_projec;
那么,问题:
create or replace TYPE BODY type_projec AS
MEMBER FUNCTION getData return varchar is
all varchar;
BEGIN
SELECT concat(to_char(t.idmovie) || t.title || t.genere || to_char(t.year)) INTO all
FROM tmovie t
WHERE t.refmovie.idmovie=self.idmovie;
return all;
END;
END;
我想将所有选定的项目连接到 return 所有项目的唯一 varchar。
SELECT concat(to_char(t.idmovie) || t.title || t.genere || to_char(t.year)) INTO all
但据说 all
似乎是正确的?
有可能的答案吗?
"But supposedly
all
seems correct?"
到一定程度。
ALL
是一个 Oracle 保留字,所以它是一个糟糕的变量名选择。使用其他东西,甚至 l_all
,而不是。
CONCAT() 有两个参数;你只提供一个。由于您正在使用 ||
连接运算符,因此您不需要调用 CONCAT()。这会起作用
SELECT to_char(t.idmovie) || t.title || t.genere || to_char(t.year) INTO l_all
另外,引用类型的语法是错误的。这将编译...
WHERE t.idmovie=self.idmovie;
...但它可能不是你想要实现的。
ALL
和 DATE
是保留字——您想使用其他名称代替这些名称。您不需要使用 CONCAT(str1,str2)
(并且您只提供一个参数),因为您使用的是 ||
连接运算符。
你可以直接使用 DEREF()
:
create or replace TYPE BODY type_projec AS
MEMBER FUNCTION getData return varchar is
str varchar(4000);
BEGIN
SELECT DEREF( self.refmovie ).idmovie
|| DEREF( self.refmovie ).title
|| DEREF( self.refmovie ).genere
|| DEREF( self.refmovie ).year
INTO str
FROM DUAL;
return str;
END;
END;
/