Oracle 创建以下过程时,不断获取编译错误

Oracle 创建以下过程时,不断获取编译错误,oracle,Oracle,创建一个名为“select_city”的过程,该过程接受一个输入参数user_id类型number和一个输出参数city_details类型varchar。此过程用于显示用户的城市详细信息。如果用户来自班加罗尔,则将城市详细信息显示为“用户来自班加罗尔”,或者如果用户来自钦奈,则将城市详细信息显示为“用户来自钦奈”,否则将城市详细信息显示为“用户来自其他城市” CREATE PROCEDURE select_city ( user_id IN user_details.id%type,

创建一个名为“select_city”的过程,该过程接受一个输入参数user_id类型number和一个输出参数city_details类型varchar。此过程用于显示用户的城市详细信息。如果用户来自班加罗尔,则将城市详细信息显示为“用户来自班加罗尔”,或者如果用户来自钦奈,则将城市详细信息显示为“用户来自钦奈”,否则将城市详细信息显示为“用户来自其他城市”

CREATE PROCEDURE select_city (  user_id IN  user_details.id%type,
                                city_details OUT VARCHAR2(255) ) 
AS
        BEGIN
        SELECT CASE
        WHEN city = 'Bangalore' THEN 'User is from Bangalore'
        WHEN city = 'Chennai' THEN 'User is from Chennai'
        ELSE 'User is from other cities'
        END tmp_status INTO city_details
        FROM contact cnt 
        WHERE cnt.id = user_id;
        END; 

OUT
参数不应具有大小。移除它


(也可能与您所获得的错误无关),考虑使用<代码>创建或替换< /代码>,因为任何后续的<代码>创建>代码>将作为过程失败-虽然无效-已经存在,所以您必须先删除它。


样本表:

SQL> create table contact as
  2  select 'Bangalore' city, 1 id from dual;

Table created.
程序:

SQL> create or replace procedure select_city
  2    (user_id       in number,
  3     city_details out varchar2                  --> no size here
  4    )
  5  as
  6  begin
  7    select case
  8      when city = 'Bangalore'  then
  9        'User is from Bangalore'
 10      when city = 'Chennai'    then
 11        'User is from Chennai'
 12      else
 13        'User is from other cities'
 14    end tmp_status
 15    into city_details
 16    from contact cnt
 17    where cnt.id = user_id;
 18  end;
 19  /

Procedure created.
测试:

SQL> set serveroutput on;
SQL> declare
  2    l_citydet varchar2(255);
  3  begin
  4    select_city(1, l_citydet);
  5    dbms_output.put_line(l_citydet);
  6  end;
  7  /
User is from Bangalore

PL/SQL procedure successfully completed.

SQL>

请点击编辑您的问题,选择突出显示您的代码,并使用文本框上方的按钮,这看起来像是
{}
。此外,在您的软件开发生命的剩余时间内,在不包含确切错误消息的情况下,不要再对其他软件工程师说“我遇到了错误”。OUT或IN或IN OUT不重要。形式参数没有给出大小。但只有数据类型。