PL SQL 函数问题
Posted
技术标签:
【中文标题】PL SQL 函数问题【英文标题】:PL SQL function problems 【发布时间】:2015-04-21 12:30:28 【问题描述】:我正在尝试编写一个 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:
该过程应采用一个 IN 参数(名称或名称的一部分),并返回四个 OUT 参数(组织名称、X 坐标、Y 坐标、错误消息(如果没有错误消息,则返回 'none'被抛出))。
我知道目前代码不会查找错误,但我只是想让一个简单的版本正常工作,之后我可以添加更多功能。
【问题讨论】:
PL/SQL 真的可以与 mysql 一起使用吗?考虑改为标记 Oracle? 错误很明显。您需要一个into
子句、一个变量,并在return
语句中使用这个变量。
【参考方案1】:
您的代码存在几个问题:
首先,您遇到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;
/
【讨论】:
【参考方案2】:我现在没有工具来检查它是否确实有效,但试试这个:
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 函数问题的主要内容,如果未能解决你的问题,请参考以下文章