2014-10-22 3 views
0

Это моя процедура, которая отлично компилируется Я пытаюсь получить дату выпуска и срок, когда я ввести название фильма:PL/SQL процедура не работает. Помоги пожалуйста?

create or replace PROCEDURE get_films 
(fname IN film.title%type, 
r_date OUT film.release_date%type, 
dur OUT film.f_duration%type) AS 
BEGIN 
SELECT release_date, f_duration into 
r_date, dur 
FROM FILM 
WHERE title = fname; 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
r_date:='';dur:=''; 
END get_films; 

Его, когда я называю его я получаю ошибки:

set serveroutput on 
DECLARE 
ftit FILM.TITLE%type:=&Enter_Film_Title; 
frdate film.release_date%type; 
fdur film.f_duration%type; 
BEGIN 
GET_FILMS(ftit, frdat, fdur); 
DBMS_OUTPUT.PUT_LINE('Title   Release_date  F_Duration'); 
DBMS_OUTPUT.PUT_LINE(ftit||'  '||frdate||'   '||fdur); 
EXCEPTION 
WHEN OTHERS THEN 
DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM); 
END; 

ошибки:

old:EXECUTE GET_FILMS(&Enter_Title) 
new:EXECUTE GET_FILMS(Interstellar) 

Error starting at line : 17 in command - 
EXECUTE GET_FILMS(&Enter_Title) 
Error report - 
ORA-06550: line 1, column 17: 
PLS-00201: identifier 'INTERSTELLAR' must be declared 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

ответ

1

INTERSTELLAR обрабатывается как переменная, а не строковое значение. Вы должны ввести значение в одинарные кавычки:

ftit FILM.TITLE%type:='&Enter_Film_Title'; 
Смежные вопросы