如何使用函数得到正确的结果?

rong451 2007-12-13 01:23:22
--sql里面可以这按下面这样做

create table table1(id1 int,d_name varchar(100))
insert into table1(id1,d_name) values(1,'张');
insert into table1(id1,d_name) values(2,'王');
insert into table1(id1,d_name) values(3,'李');

create table table2(id2 int,bookname varchar(100),id1 int)
insert into table2(id2,bookname,id1) values(1,'大学英语',2);
insert into table2(id2,bookname,id1) values(2,'高数',2);
insert into table2(id2,bookname,id1) values(3,'邓小平理论',3);

--函数根据table2的id1取关联表(table1)的结果字段(d_name)
create function f_getdnamebyid1(@id1 int)
returns varchar(100)
as
begin
declare @dname varchar(100)
select @dname = d_name from table1 where id1 = @id1
return @dname
end

用函数
select id2,dbo.f_getdnamebyid1(id1) d_name,bookname from table2
1 王 大学英语
2 王 高数
3 李 邓小平理论

--------------------------

create table table1(id1 number,d_name varchar2(100))
insert into table1(id1,d_name) values(1,'张');
insert into table1(id1,d_name) values(2,'王');
insert into table1(id1,d_name) values(3,'李');

create table table2(id2 number,bookname varchar2(100),id1 number)
insert into table2(id2,bookname,id1) values(1,'大学英语',2);
insert into table2(id2,bookname,id1) values(2,'高数',2);
insert into table2(id2,bookname,id1) values(3,'邓小平理论',3);

--函数根据table2的id1取关联表(table1)的结果字段(d_name)
create or replace function f1(indid in number) return varchar2
as
tmp_d_name varchar2(100);
begin
select d_name into tmp_d_name from table1 where id1 = indid;
result := tmp_d_name;
return result;
exception
WHEN OTHERS THEN
result := 'wrong';
return result;
end test2;

问:可不可以像sql一样在某条查询语句里面用函数关联字段,取另一个表的关联的目的字段,在oracle里面怎样写,
并得到与sql上面相同的结果,(
当然在oracle里面用left join,where来写也能得到上面相同结果,但是代码看起不简洁,
我们在sql里面写很多函数,然后查询时根据函数来取目的字段,但现在oracle不知道怎么写了)
或者大家有什么好的简洁代码也可以,谢谢大家了!!!(不管上面oracle语法错误,oracle没测试,假设上面oracle函数是正确的,sql是通过的)
...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rong451 2007-12-13
  • 打赏
  • 举报
回复
因为我这只是举个例子而已,当我真的要关联表时有3-4张表啊
在程序里面看起来就不怎么好了,所以还是想用函数来处理!
liuyxit 2007-12-13
  • 打赏
  • 举报
回复
修正一下:

下面的也算“不简洁”?
8i:
select *
from table1 a,table2 b
where a.id1 = b.id1 --上面把这打成2了。

9i:
select *
from table1 a join table2 b
on a.id1 = b.id1

你一定要函数,当然也可以,但我来看更不简洁了。(还要写多一个函数代码)
liuyxit 2007-12-13
  • 打赏
  • 举报
回复
下面的也算“不简洁”?
8i:
select *
from table1 a,table2 b
where a.id1 = b.id2

9i:
select *
from table1 a join table2 b
on a.id1 = b.id1

你一定要函数,当然也可以,但我来看更不简洁了。(还要写多一个函数代码)

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧