我是Oracle SQL的新手(尽管我已经写了很多SQL)并且在函数中嵌入一个简单的SELECT语句时遇到了麻烦。感觉就像SQL ABC,但我似乎无法得到它:(
我认为我正在使用PL-SQL
这是我到目前为止所拥有的:
create or replace FUNCTION GET_GROUP_BY_ID RETURN VARCHAR2
AS my_result
BEGIN
SELECT fav_group.name
INTO my_result
FROM fav_group
WHERE fav_group.id = 12345
RETURN my_result;
END GET_GROUP_BY_ID;
正如我所说,我通过查看谷歌上的代码示例尝试了很多上述代码的变体,但似乎无法做到正确。
答案 0 :(得分:11)
使用:
CREATE OR REPLACE FUNCTION GET_GROUP_BY_ID
RETURN VARCHAR2 AS
my_result FAV_GROUP.NAME%TYPE;
BEGIN
SELECT fav_group.name
INTO my_result
FROM fav_group
WHERE fav_group.id = 12345;
RETURN my_result;
END GET_GROUP_BY_ID;
问题是my_result被用作变量,但从未声明过。
我使用%TYPE
表示法来声明变量,因此它使用与用于填充变量的列相同的数据类型。如果列数据类型发生变化,则变量会自动更改以适应 - 更改表后不会担心数据类型问题,除非您完全删除列。
答案 1 :(得分:0)
回答我上一篇关于OMG小马回答的评论:
要从函数中获取一个以上的结果,请使用REF CURSOR
create or replace
PACKAGE BODY REPORTING AS
FUNCTION GET_GROUP_BY_GID RETURN REF_CURSOR AS
RESULT_SET REF_CURSOR;
BEGIN
OPEN RESULT_SET FOR
SELECT favorite_group.name
FROM favorite_group
WHERE favorite_group.creator_gid = 450160;
RETURN RESULT_SET;
EXCEPTION WHEN OTHERS THEN
RAISE;
END GET_GROUP_BY_GID;