PL SQL函数问题

时间:2015-04-21 12:30:29

标签: 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, 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命令时的错误消息:

FUNCTION GETNAME compiled
Errors: check compiler log

错误(5,3):PLS-00428:此SELECT语句中需要INTO子句

当我运行执行行时,我得到了这个:

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,错误消息(或' none&#39) ;如果没有抛出错误消息))。

我知道目前代码并没有查找错误,但我只是想让一个简单的版本工作,我可以添加更多功能。

2 个答案:

答案 0 :(得分:2)

您的代码存在以下几个问题: 首先,您遇到PLS-00428错误,这意味着您没有给出INTO条款 例如:

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
  INTO name, XCOORD, YCOORD -- I assume this is how you need them kept
  from BBT_POI
  WHERE (UPPER(name) LIKE UPPER('%'|| NAME || '%'));
  return NAME;
end;
/

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

DECLARE
 input varchar;
 errormsg varchar;
 organisation varchar;
 x NUMBER;
 y NUMBER;
BEGIN
  getName('yach', organisation, x, y, errormsg);
END;
/

答案 1 :(得分:1)

我现在没有工具来检查它是否有效,但试试这个:

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;