PL SQL 功能问题
PL SQL function problems
我正在尝试编写一个 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);
这些是我 运行 创建或替换函数命令时的错误消息:
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:
该程序应采用一个输入参数(名称或名称的一部分),以及 return 四个输出参数(组织名称、X 坐标、Y 坐标、错误消息(或 'none' 如果没有抛出错误信息))。
我知道目前代码不查找错误,但我只是想让一个简单的版本工作,我可以在之后添加更多功能。
您的代码有几个问题:
首先,您遇到 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;
/
我现在没有工具来检查它是否确实有效,但试试这个:
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 函数,但是我在格式和一般语法方面遇到了一些问题。
这是我当前的代码:
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);
这些是我 运行 创建或替换函数命令时的错误消息:
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:
该程序应采用一个输入参数(名称或名称的一部分),以及 return 四个输出参数(组织名称、X 坐标、Y 坐标、错误消息(或 'none' 如果没有抛出错误信息))。
我知道目前代码不查找错误,但我只是想让一个简单的版本工作,我可以在之后添加更多功能。
您的代码有几个问题:
首先,您遇到 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;
/
我现在没有工具来检查它是否确实有效,但试试这个:
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;