【发布时间】:2020-08-07 08:29:02
【问题描述】:
我是PL/SQL 的初学者,我想创建函数来检索 AllProject。
到目前为止,我创建的是
CREATE OR REPLACE FUNCTION GETALLPROJECTS(currentUserID in INT)
RETURN SYS_REFCURSOR
IS
rc SYS_REFCURSOR;
BEGIN
OPEN rc FOR
SELECT p.*
FROM projects p
LEFT JOIN project_users_schedule_dates pusd
ON
pusd.ProjectID = p.ProjectID
AND
pusd.UserID = currentUserID
LEFT JOIN responsible_persons rp
ON
rp.ProjectID = p.ProjectID
AND
rp.UserID = currentUserID
LEFT JOIN users u ON u.UserID = currentUserID
WHERE
u.User_roleID = 1
(
(p.Responsible_person_id = currentUserId OR
p.Delivery_contact = currentUserId OR
rp.UserID = currentUserId OR
(pusd.ProjectID = p.ProjectID AND
pusd.UserID = currentUserId AND NOW() BETWEEN pusd.StartDate AND pusd.EndDate + INTERVAL 1 DAY
AND
NOW() BETWEEN p.StartDate AND p.EndDate + INTERVAL 1 DAY)
AND p.status = 2)
)
ORDER BY p.ProjectID;
RETURN rc;
END GETALLPROJECTS;
编译时出现两个错误,我不明白错误是什么:
第一个错误是:
Error(6,1): PL/SQL: SQL Statement ignored
第二个错误是:
Error(27,24): PL/SQL: ORA-00933: SQL command not properly ended
【问题讨论】:
-
另外请检查查询是否在函数之外独立工作,我也看到 Group by 语句有问题。
-
是的,我对其进行了测试,它工作正常,但是当我将其转换为函数时不起作用!
-
这看起来有点奇怪
u.User_roleID = 1 ( (p.Responsible_person_id = currentUserId OR..你确定这个 SQL 有效吗? -
这是
MySQL查询,我需要转移到PL/SQL