Oracle Pl/SQl:具有中间结果的自定义函数
Posted
技术标签:
【中文标题】Oracle Pl/SQl:具有中间结果的自定义函数【英文标题】:Oracle Pl/SQl: custom function with intermediate results 【发布时间】:2011-02-22 16:41:43 【问题描述】:我需要使用一些 oracle 内置方法(解析、strlength、...)将字符串转换为数字 我不知道如何为方法内的变量赋值,也不知道将声明部分放在哪里。
CREATE OR REPLACE FUNCTION EXAMPLE (param IN VARCHAR2)
RETURN NUMBER AS
BEGIN
SELECT <string_handling_using_param>
INTO var
FROM DUAL;
RETURN TO_NUMBER(<some computation using var>);
END EXAMPLE ;
我尝试了一些关于这个函数的变体,比如添加一个 OUT 参数来存储中间变量,但是我不能从常规 SQL 调用这个函数...
关于如何实现这一点的任何建议?
【问题讨论】:
【参考方案1】:如果我理解正确,您只需要定义“var”变量...
create or replace FUNCTION EXAMPLE (param IN VARCHAR2)
RETURN NUMBER
AS
var VARCHAR2(100); -- This datatype may need modification
BEGIN
select <string_handling>
into var
from dual;
return to_number(<some computation using var>);
END EXAMPLE ;
根据您的具体操作,可能会有更好的方法不需要 SELECT ... FROM DUAL:
create or replace FUNCTION EXAMPLE (param IN VARCHAR2)
RETURN NUMBER
AS
var VARCHAR2(100); -- This datatype may need modification
BEGIN
var := <string_handling>;
return to_number(<some computation using var>);
END EXAMPLE ;
【讨论】:
你救了我的命 :) 至少我的下午。我没有找到放置 'var VARCHAR2(100);' 的位置宣言。非常感谢 !我需要“从双重选择”,因为该过程中涉及到 decode()。 Guillaume,虽然解码存在问题,但请记住,在最近的 ORacle 版本中,CASE 语句可以在简单语句中使用,并且比 DECODE() 更健壮。 var:=case whencreate or replace FUNCTION EXAMPLE (param IN VARCHAR2)
RETURN NUMBER AS
-- declare section between AS and BEGIN
var varchar2(100);
BEGIN
select <string_handling> into var from dual;
-- also note that many built-in functions can be done directly
-- without calling a select, so in many cases
-- var := substr(param,1,10) <or some other string handling>;
-- is perfectly acceptable too.
return to_number(<some computation using var>);
EXCEPTION -- if you need an exception handler
when value_error then
<do something with it or set a default return value or whatever>
END EXAMPLE ;
【讨论】:
以上是关于Oracle Pl/SQl:具有中间结果的自定义函数的主要内容,如果未能解决你的问题,请参考以下文章