ORACLE 自定义函数的问题

QQ46691550 2008-07-29 02:46:20
A表
ID NUM CONVERT
1 80 1.1
2 78 2.1
3 29 3.1





想要的结果是NUM字段乘以CONVERT字段,得到的返回结果(80*1.1)+(78*2.1)+(29*3.1)



请高手教我一下怎么样在函数中得到CONVERT字段的内部,谢谢!
...全文
498 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracledbalgtu 2008-07-29
  • 打赏
  • 举报
回复
如果是在sqlplus中执行,需要给“/”啊。常识。



DROP TABLE b;
CREATE TABLE b (ID int,num NUMBER,CONVERT NUMBER);
INSERT INTO b VALUES(1,80,1.1);
INSERT INTO b VALUES(2,78,2.1);
INSERT INTO b VALUES(3,29,3.1);
COMMIT;
SELECT * FROM b;

CREATE OR REPLACE FUNCTION G(vID NUMBER) RETURN VARCHAR2 AS
R_STR VARCHAR2(20);
BEGIN
SELECT '(' || NUM || '*' || CONVERT || ')'
INTO R_STR
FROM B
WHERE ID = vID
AND ROWNUM = 1;
RETURN R_STR;
END;
/

SELECT g(1)||'+'||g(2)||'+'||g(3) FROM dual;


[Quote=引用 6 楼 QQ46691550 的回复:]
5楼的大哥提供的代码正是我想要的,可是为什么会提示 警告: 创建的函数带有编译错误。
[/Quote]
QQ46691550 2008-07-29
  • 打赏
  • 举报
回复
5楼的大哥提供的代码正是我想要的,可是为什么会提示 警告: 创建的函数带有编译错误。
oracledbalgtu 2008-07-29
  • 打赏
  • 举报
回复

给你个代码学习:
DROP TABLE b;
CREATE TABLE b (ID int,num NUMBER,CONVERT NUMBER);
INSERT INTO b VALUES(1,80,1.1);
INSERT INTO b VALUES(2,78,2.1);
INSERT INTO b VALUES(3,29,3.1);
COMMIT;
SELECT * FROM b;

CREATE OR REPLACE FUNCTION G(vID NUMBER) RETURN VARCHAR2 AS
R_STR VARCHAR2(20);
BEGIN
SELECT '(' || NUM || '*' || CONVERT || ')'
INTO R_STR
FROM B
WHERE ID = vID
AND ROWNUM = 1;
RETURN R_STR;
END;


SELECT g(1)||'+'||g(2)||'+'||g(3) FROM dual;

[Quote=引用楼主 QQ46691550 的帖子:]
A表
ID NUM CONVERT
1 80 1.1
2 78 2.1
3 29 3.1


想要的结果是NUM字段乘以CONVERT字段,得到的返回结果(80*1.1)+(78*2.1)+(29*3.1)


请高手教我一下怎么样在函数中得到CONVERT字段的内部,谢谢!
[/Quote]
hebo2005 2008-07-29
  • 打赏
  • 举报
回复
直接sum(num*convert) 不就行了,还用写什么函数啊
wha5c301 2008-07-29
  • 打赏
  • 举报
回复
select SUM(AA.plus)
from (select (NUM * CONVERT) as plus from A表 )AA
dbcxbj 2008-07-29
  • 打赏
  • 举报
回复
这个很好写啊.
create or replace function aaa() return number
is
total number;
begin
select sum(num*convert) into total from a;
return total;
end;

没测试过,你试下看行不行
horizonlyhw 2008-07-29
  • 打赏
  • 举报
回复
做個循環  

result number;
for rec in (select * from A)
loop
result := to_number(rec.num)*to_number(rec.convert)
end loop;
大概意思就是這樣~

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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