PL SQL函数问题

PL SQL函数问题,sql,oracle,function,plsql,Sql,Oracle,Function,Plsql,我正在尝试编写一个PL SQL函数,但在格式和通用语法方面遇到了一些问题 这是我当前的代码: create or replace function getName(name IN varchar, organisation OUT varchar, xcoord OUT number, ycoord OUT number, errormsg OUT varchar) return varchar2 as begin Select name, LOCX,

我正在尝试编写一个PL SQL函数,但在格式和通用语法方面遇到了一些问题

这是我当前的代码:

create or replace function getName(name IN varchar, organisation OUT varchar, 
                   xcoord OUT number, ycoord OUT number, errormsg OUT varchar)
return varchar2
as
begin
  Select name, LOCX, LOCY
  from BBT_POI
  WHERE (UPPER(name) LIKE UPPER('%'|| NAME || '%'));
  return NAME;
end;
/

 variable input varchar;
 Variable errormsg varchar;
 Variable organisation varchar;
 Variable x NUMBER;
 Variable y NUMBER;


 execute getName ('yach', organisation, x, y, errormsg);
以下是我运行create或replace函数命令时的错误消息:

FUNCTION GETNAME compiled
Errors: check compiler log
错误(5,3):PLS-00428:此SELECT语句中应包含INTO子句

当我运行execute行时,我得到如下结果:

Error starting at line : 40 in command -
execute getName ('yach', organisation, x, y, errormsg)
Error report -
ORA-06550: line 1, column 24:
PLS-00201: identifier 'ORGANISATION' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
该过程应采用一个IN参数(名称或名称的一部分),并返回四个OUT参数(组织名称、X-coord、Y-coord、错误消息(如果没有抛出错误消息,则返回“无”)


我知道目前的代码没有寻找错误,但我只是试图得到一个简单的版本工作,我可以添加更多的功能后

您的代码有几个问题: 首先,您遇到了
PLS-00428
错误,这意味着您没有向
子句提供

例如:

接下来,必须将下一个块定义为匿名块。Oracle不知道您正在尝试使用PL/SQL,除非您明确告诉它您正在使用PL/SQL。
所以你的变量需要在一个块中(你也不需要说变量):


我现在没有工具可以确定它是否有效,但请尝试以下方法:

create or replace function getName(p_name IN varchar, organisation OUT varchar, 
                   xcoord OUT number, ycoord OUT number, errormsg OUT varchar)
return varchar2
as
begin
  Select name, LOCX, LOCY
  INTO p_name, xcoord, coord 
  from BBT_POI
  WHERE (UPPER(p_name) LIKE UPPER('%'|| p_name || '%'));
  return p_name;
end;
/

 declare
    input varchar;
    errormsg varchar;
    organisation varchar;
    x NUMBER;
    y NUMBER;
 begin
    input:=getName ('yach', organisation, x, y, errormsg);
 end;

PL/SQL真的能与MySQL一起工作吗?考虑改为标记Oracle?错误很明显。您需要一个
into
子句,一个变量,并在
return
语句中使用此变量。
DECLARE
 input varchar;
 errormsg varchar;
 organisation varchar;
 x NUMBER;
 y NUMBER;
BEGIN
  getName('yach', organisation, x, y, errormsg);
END;
/
create or replace function getName(p_name IN varchar, organisation OUT varchar, 
                   xcoord OUT number, ycoord OUT number, errormsg OUT varchar)
return varchar2
as
begin
  Select name, LOCX, LOCY
  INTO p_name, xcoord, coord 
  from BBT_POI
  WHERE (UPPER(p_name) LIKE UPPER('%'|| p_name || '%'));
  return p_name;
end;
/

 declare
    input varchar;
    errormsg varchar;
    organisation varchar;
    x NUMBER;
    y NUMBER;
 begin
    input:=getName ('yach', organisation, x, y, errormsg);
 end;