创建和执行函数时出错

时间:2015-06-26 04:19:41

标签: oracle function plsql

我有一张表格如下:

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_ptheatre_id_pscreening_date_pscreening_start_hh24_pscreening_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。

2 个答案:

答案 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并尝试。