PL SQL函数问题
我正在尝试编写一个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,
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;