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 函数返回多个值

PL/SQL 函数错误

PL/SQL 函数在执行时抛出进程内存错误

PL/SQL 函数返回错误结果

为啥我的 PL/SQL 触发器会引发“错误(2,2):PL/SQL:语句被忽略”和“错误(2,5):PLS-00204:函数或伪列'EXISTS'”错误?

PL/sql 函数返回多行错误