在Oracle用户定义的函数中编写select语句

时间:2010-11-10 18:29:27

标签: sql oracle function plsql

我是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;

正如我所说,我通过查看谷歌上的代码示例尝试了很多上述代码的变体,但似乎无法做到正确。

2 个答案:

答案 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;