PL/SQL 函数错误 - 无法理解
Posted
技术标签:
【中文标题】PL/SQL 函数错误 - 无法理解【英文标题】:PL/SQL function error- not understandable 【发布时间】:2015-12-07 22:25:54 【问题描述】:我必须做一个 pl/sql 函数。我已经完成了,但在服务器上显示错误,但我不知道错误是什么意思。 有人可以指导我正确的方向来完成该功能吗?
这是代码: 显示错误
CREATE OR REPLACE FUNCTION sum_of_task_types(project project.project_no%TYPE)
RETURN NUMBER IS
task NUMBER;
BEGIN
SELECT COUNT(DISTINCT t.task_type_no)
INTO task
FROM project p, stage s, task t ;
WHERE user_input_var = p.project_no;
AND p.project_no = s.project_no;
AND s.stage_id = t.stage_id;
AND p.project = project;
RETURN task;
END;
/
--函数的使用
SELECT project_no, sum_of_task_types(project_no)project;
我不知道这里的代码是否清晰,所以我添加了一个显示代码本身图像的文档,错误如下所示:
CREATE OR REPLACE FUNCTION sum_of_task_types(project project.project_no%TYPE)
RETURN NUMBER IS
task NUMBER;
BEGIN
SELECT COUNT(DISTINCT t.task_type_no)
INTO task
FROM project p, stage s, task t
WHERE user_input_var = p.project_no
AND p.project_no = s.project_no
AND s.stage_id = t.stage_id
AND p.project = project
RETURN task;
END;
/
我现在已经这样做了,仍然报错:
LINE/COL 错误 6/5 PL/SQL:忽略 SQL 语句 13/5 PL/SQL:ORA-00933:SQL 命令未正确结束
【问题讨论】:
每行行的末尾都有一个;
。 ;
只出现在 statement 的末尾。
谢谢你的回答,我的情况不是这样,删除“;”后它给出了这些错误:LINE/COL ERROR 6/5 PL/SQL:SQL 语句被忽略 13/5 PL/SQL:ORA-00933:SQL 命令未正确结束
是的,它是“你的情况”。而且你不应该删除 all ;
你仍然需要在每个语句的末尾有一个。
我只删除了其中的 4 个。代码如下所示: SHOW ERRORS CREATE OR REPLACE FUNCTION sum_of_task_types(project project.project_no%TYPE) RETURN NUMBER IS task NUMBER; BEGIN SELECT COUNT(DISTINCT t.task_type_no) INTO task FROM project p, stage s, task t WHERE user_input_var = p.project_no AND p.project_no = s.project_no AND s.stage_id = t.stage_id AND p.project = project RETURN task ;结尾; /
编辑您的问题。不要在 cmets 中发布代码。
【参考方案1】:
只需添加一个';'在'AND p.project = project'之后表示sql语句终止,这将变得无错误。
【讨论】:
【参考方案2】:--There was a slight ';' syntactical mistake which was in the way of compiling FUNCTION correctly. I have posted below code hope it helps
CREATE OR REPLACE FUNCTION sum_of_task_types(
project project.project_no%TYPE)
RETURN NUMBER
IS
task NUMBER;
BEGIN
SELECT COUNT(DISTINCT t.task_type_no)
INTO task
FROM project p,
stage s,
task t
WHERE user_input_var = p.project_no
AND p.project_no = s.project_no
AND s.stage_id = t.stage_id
AND p.project = project;
RETURN task;
END;
【讨论】:
以上是关于PL/SQL 函数错误 - 无法理解的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 PL/SQL 触发器会引发“错误(2,2):PL/SQL:语句被忽略”和“错误(2,5):PLS-00204:函数或伪列'EXISTS'”错误?