我有一张表格如下:
SCREENING_ID PLAN_ID THEATRE_ID SCREENING_DATE SCREENING_START_HH24 SCREENING_START_MM60
1 1 3 01.06.2015 00:00:00 9 0
2 1 3 01.06.2015 00:00:00 11 30
3 1 3 01.06.2015 00:00:00 14 0
4 1 4 01.06.2015 00:00:00 14 0
我必须检查特定时间段是否可用。此功能应包含以下输入参数:plan_id_p
,theatre_id_p
,screening_date_p
,screening_start_hh24_p
, screening_start_mm60_p
。如果有时间段,则应返回1
,否则返回0
。
我的代码:
CREATE OR REPLACE FUNCTION Func_is_time_available
(plan_id_p IN NUMBER,
theatre_id_p IN OUT NUMBER,
screening_date_p IN OUT DATE,
screening_start_hh24_p IN OUT NUMBER,
screening_start_mm60_p IN OUT NUMBER)
RETURN NUMBER
AS
return_val NUMBER;
CURSOR cr2 IS
SELECT plan_id,
THEATRE_ID,
SCREENING_DATE,
SCREENING_START_HH24,
SCREENING_START_MM60
FROM screening s
WHERE plan_id = plan_id_p and
theatre_id=theatre_id_p and
SCREENING_DATE=SCREENING_DATE_P and
SCREENING_START_HH24=SCREENING_START_HH24_P and
SCREENING_START_MM60=SCREENING_START_MM60_P;
BEGIN
OPEN cr2;
FETCH cr2 INTO plan_id_p,
THEATRE_ID_P,
SCREENING_DATE_P,
SCREENING_START_HH24_P,
SCREENING_START_MM60_P;
IF cr2%NOTFOUND THEN
return_val := 1;
ELSE
return_val := 0;
END IF;
CLOSE cr2;
RETURN return_val;
END;
执行部分:
DECLARE
v_result NUMBER;
BEGIN v_result:=Func_is_time_available(plan_id_p=>1,
theatre_id_p=>3,
screening_date_p=>'1/JUN/2015',
screening_start_hh24_p=>9,
screening_start_mm60_p=>0);
END;
但这是错误的:
ORA-06550: line 18, column 44:
PLS-00363: expression '<expression>' cannot be used as an assignment target
任何人都可以解释我的错误吗? 我正在使用oracle。
答案 0 :(得分:3)
我已对您的代码进行了更改,请参阅下面的
CREATE OR REPLACE FUNCTION Func_is_time_available
(plan_id_p IN NUMBER,
theatre_id_p IN NUMBER,
screening_date_p IN DATE,
screening_start_hh24_p IN NUMBER,
screening_start_mm60_p IN NUMBER)
RETURN NUMBER
AS
return_val NUMBER;
var1 number;
begin
SELECT count(*) into var1
FROM screening s
WHERE plan_id = plan_id_p and
theatre_id=theatre_id_p and
SCREENING_DATE=SCREENING_DATE_P and
SCREENING_START_HH24=SCREENING_START_HH24_P and
SCREENING_START_MM60=SCREENING_START_MM60_P;
if var1 >= 1 then -- count can be 1 or > 1
return_val:= 1;
else return_val:=0;
end if;
end;
答案 1 :(得分:0)
将所有参数设为IN
而不是IN OUT
并尝试。