如何在Oracle中仅将列用作1行到1行返回pl / sql函数中的参数
Posted
技术标签:
【中文标题】如何在Oracle中仅将列用作1行到1行返回pl / sql函数中的参数【英文标题】:How to use only the column as the parameter in a 1 row to 1 row return pl/sql function in Oracle 【发布时间】:2017-03-11 14:31:27 【问题描述】:我写了这个函数fexemplo
,这样调用:
select fexemplo(id) from texemplo;
id是表texemplo的主键。
texemplo如下:
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(10)
TVALUE NUMBER(10)
函数将tvalue
属性中的值加10。
如果我们有:
select * from texemplo;
ID TVALUE
---------- ----------
1 20
3 59
然后:
select fexemplo(id) from texemplo;
即将回归:
FEXEMPLO(ID)
------------
30
69
我使用的功能码是:
create or replace function fexemplo (pid IN NUMBER)
RETURN NUMBER
IS
vteste NUMBER(10);
BEGIN
SELECT tvalue
INTO vteste
FROM texemplo
WHERE id=pid;
vteste := vteste+10;
RETURN vteste;
END fexemplo;
/
它工作正常 - 它按预期为每一行返回一个结果。但是我希望这个函数是通用的。所以,我希望它可以与像这样的其他表一起使用:
Name Null? Type
----------------------------------------- -------- ----------------------------
USERID VARCHAR2(50)
AGE NUMBER(10)
PHOTO BLOB
NOFFRIENDS NUMBER(10)
我想在 NOFFRIENDS 列中添加 10。 我应该能够在另一张桌子上执行 相同的 功能。 因此我不能使用 id 作为参数。功能代码必须完全不同。
我要使用的参数是 NUMBER,所以我可以在两个表上执行它:
select fexemplo(tvalue) from texemplo;
或
select fexemplo(noffriends) from utable;
返回还是 1 到 1 行。
tvalue
和 noffriends
列可能具有重复值。
功能代码可能完全不同。
我怎样才能做到?
另一个例子是:我怎么能自己做一个ABS函数?
如何在 PL/SQL 上实现 ABS 函数?
这里解释了功能:
ABS function
提前致谢!
【问题讨论】:
为什么要编写自己的 ABS() 函数?如果是为了智力挑战要求我们为你写它,那就是被宠坏的东西。 这是一个例子......只是一个例子......我想做另一件事......那是为了说明我的问题......只是它...... 【参考方案1】:你正在这样调用你的函数......
select fexemplo(id) from texemplo;
... 这样您就可以避免查询表本身。正如您的问题实际上所说,您需要做的就是将作为输入参数传递的值更改为正在修改的列:
select fexemplo(tvalue) from texemplo;
这个版本不仅更简单更明显,而且完全通用;
create or replace function fexemplo (pid IN NUMBER)
RETURN NUMBER
is
begin
return pid + 10;
end;
【讨论】:
这真的是被问到的问题吗?我完全误解了它! 就是这样...很简单...感谢您的关注。以上是关于如何在Oracle中仅将列用作1行到1行返回pl / sql函数中的参数的主要内容,如果未能解决你的问题,请参考以下文章