PL/SQL中忽略的SQL语句
所以我正在为oracledb编写一个函数,但是我得到了一个错误,说sql语句被忽略了,所以表达式丢失了 职能:PL/SQL中忽略的SQL语句,sql,oracle,plsql,Sql,Oracle,Plsql,所以我正在为oracledb编写一个函数,但是我得到了一个错误,说sql语句被忽略了,所以表达式丢失了 职能: CREATE OR REPLACE FUNCTION getQueueNumber (student IN VARCHAR,course IN CHAR) RETURN INT IS queuePosition INT; date TIMESTAMP; BEGIN SELECT waitingDate INTO date FROM Wai
CREATE OR REPLACE FUNCTION getQueueNumber
(student IN VARCHAR,course IN CHAR)
RETURN INT
IS
queuePosition INT;
date TIMESTAMP;
BEGIN
SELECT waitingDate INTO date
FROM WaitingCourseStudent wcs
WHERE wcs.student=student AND wcs.course=course;
IF SQL%NOTFOUND THEN queuePosition := NULL;
ELSE
SELECT COUNT(*) as pos
INTO queuePosition
FROM WaitingCourseStudent
WHERE waitingDate<=date;
END IF;
RETURN queuePosition;
END;
您可能正在寻找的是错误处理,而不仅仅是if
CREATE OR REPLACE FUNCTION getQueueNumber
(p_student IN VARCHAR, p_course IN CHAR)
RETURN INT
IS
queuePosition INT;
v_date TIMESTAMP;
BEGIN
BEGIN
SELECT waitingDate INTO v_date
FROM WaitingCourseStudent wcs
WHERE wcs.student = p_student AND wcs.course = p_course;
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN NULL;
END;
SELECT COUNT(*) as pos
INTO queuePosition
FROM WaitingCourseStudent
WHERE waitingDate <= v_date;
RETURN queuePosition;
END;
创建或替换函数getQueueNumber
(p_学生用瓦查尔语,p_课程用查尔语)
返回整数
是
队列位置INT;
v_日期时间戳;
开始
开始
选择waitingDate进入v_日期
来自WaitingCourseStudent wcs
其中wcs.student=p_学生,wcs.course=p_课程;
例外情况
如果未找到数据,则返回NULL;
结束;
选择计数(*)作为pos
进入队列位置
来自WaitingCourseStudent
其中waitingDate选择waitingDate INTO date正确答案如下:
创建或替换函数getQueueNumber(vstudent在VARCHAR中,vcourse在CHAR中)
返回整数
是
队列位置INT;
日期1时间戳;
开始
从WaitingCourseStudent中选择waitingDate INTO date1,其中student=vstudent,course=vcourse;
如果找不到SQL%n,则
queuePosition:=NULL;
其他的
从WaitingCourseStudent中选择COUNT(*)进入queuePosition,其中waitingDate请避免使用保留字声明变量。日期是一个保留字。此外,请避免将参数命名为与列完全相同的名称。将参数命名为与列相同的名称,但在SQL中使用函数名对其命名。ie“wcs.student=getQueueNumber.student”出于性能原因,您可能还应该将两个查询合并为一个查询。在第二个查询中,您不需要对课程应用谓词,或者您正在计算所有课程。@Davidardridge啊,忘了课程,当然我也应该检查一下。啊!不知道你能做到,工作很完美:)。不过我有一些问题。变量的重命名是否意味着什么,或者您只是不喜欢这些名称。还有,为什么有两个BEGIN/END?@SiXoS调整了我的答案。如果在SQL语句中使用参数时,使用函数名对参数进行名称命名,则无需重命名这些参数。“wcs.student=getQueueNumber.student”
CREATE OR REPLACE FUNCTION getQueueNumber
(p_student IN VARCHAR, p_course IN CHAR)
RETURN INT
IS
queuePosition INT;
v_date TIMESTAMP;
BEGIN
BEGIN
SELECT waitingDate INTO v_date
FROM WaitingCourseStudent wcs
WHERE wcs.student = p_student AND wcs.course = p_course;
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN NULL;
END;
SELECT COUNT(*) as pos
INTO queuePosition
FROM WaitingCourseStudent
WHERE waitingDate <= v_date;
RETURN queuePosition;
END;
CREATE OR REPLACE FUNCTION getQueueNumber
(p_student IN VARCHAR, p_course IN CHAR)
RETURN INT
IS
queuePosition INT;
v_date TIMESTAMP;
BEGIN
SELECT waitingDate INTO v_date
FROM WaitingCourseStudent wcs
WHERE wcs.student = p_student AND wcs.course = p_course;
SELECT COUNT(*) as pos
INTO queuePosition
FROM WaitingCourseStudent
WHERE waitingDate <= v_date;
RETURN queuePosition;
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN NULL;
END;
SELECT waitingDate INTO date <--- (date is reserved keyword for denoting oracle datatype of date)
FROM WaitingCourseStudent wcs
WHERE wcs.student=student AND wcs.course=course;
IF SQL%NOTFOUND THEN queuePosition := NULL;