Oracle 使用编译错误创建的函数

Oracle 使用编译错误创建的函数,oracle,plsql,Oracle,Plsql,我需要 创建一个函数,该函数接受输入参数k_city\u id(数据类型number),并从表k_vention返回指定城市对应的体育场名。如果一个城市有多个场馆,则应提出“本城市有多个场馆”的例外 这是我的职责: create or replace function find_venuee(k_city_id in number) return k_venue.stadium_name%type is venue_name k_venue.stadium_name%type;

我需要 创建一个函数,该函数接受输入参数
k_city\u id
(数据类型
number
),并从表
k_vention
返回指定城市对应的
体育场名
。如果一个城市有多个场馆,则应提出“本城市有多个场馆”的例外

这是我的职责:

create or replace function find_venuee(k_city_id in number)
    return k_venue.stadium_name%type
is
    venue_name k_venue.stadium_name%type;
begin
    select stadium_name into venue_name from k_venue
    where city_id = k_city_id;

    return venue_name;
exception
    when too_many_rows then
        venue_name := 'This City has more than one venue'; 
        return venue_name;
end;
/

它正在创建带有编译错误的函数。代码有什么问题

我们不知道这个表是什么样子的(所以我创建了自己的表);一切似乎都正常(参见下面的示例)

你能不能也发一些类似的帖子,让我们看看你做了什么,以及甲骨文是如何回应的

SQL> create table k_venue (city_id number, stadium_name varchar2(50));

Table created.

SQL>
SQL> create or replace function find_venuee (k_city_id in number)
  2    return k_venue.stadium_name%type
  3  is
  4    venue_name k_venue.stadium_name%type;
  5  begin
  6    select stadium_name
  7      into venue_name
  8      from k_venue
  9      where city_id = k_city_id;
 10
 11    return venue_name;
 12
 13  exception
 14    when too_many_rows then
 15      venue_name := 'This City has more than one venue';
 16      return venue_name;
 17  end;
 18  /

Function created.

SQL>
SQL> insert into k_venue values (1, 'Stadium A');

1 row created.

SQL>
SQL> select find_Venuee(1) From dual;

FIND_VENUEE(1)
--------------------------------------------------------------------------------
Stadium A

SQL>
SQL> insert into k_venue values (1, 'Stadium B');

1 row created.

SQL>
SQL> select find_Venuee(1) From dual;

FIND_VENUEE(1)
--------------------------------------------------------------------------------
This City has more than one venue

SQL>

不能有函数的动态返回类型。您必须创建一个类型作为oracle pl/sql对象,然后使用它,或者直接使用“Varchar2”,正如您所说的那样,函数将根据收到的城市id返回场馆名称

请查找以下代码:

create or replace function find_venuee(k_city_id in number)
return varchar2 is
venue_name k_venue.stadium_name%type;
begin
select stadium_name into venue_name from k_venue
where city_id = k_city_id;
return venue_name;
exception
when too_many_rows then
venue_name := 'This City has more than one venue'; 
return venue_name;
end;
/
希望这会有所帮助

谢谢
Ankit.

将错误添加到问题中并格式化您的代码运行
显示错误
要找出错误所在,在您告诉我们之前,我们只能猜测编译错误可能是什么。