У меня возникла проблема в sqlplus, где я не могу выполнить скрипт для создания хранимой процедуры. Когда я пытаюсь запустить сценарий, я получаю следующее сообщение об ошибке:Oracle SQL - не удается создать хранимую процедуру
PLS-000103: Encountered the symbol "CREATE" when expecting one of the following: begin function pragma procedure subtype type current cursor delete exists prior external language
Я считал, что это может быть простой случай не запущен скрипт корректно, когда я вхожу в SQLPLUS, я просто введите следующее :
@ASSIGN_PILOT.sql
Есть ли причина, по которой она не должна работать? Есть ли другой способ вызова сценариев для создания хранимых процедур или что-то в этом роде? Мой сценарий выглядит следующим образом. Я знаю, что в нем, вероятно, много ошибок, но я буду рад обратиться к ним, как только я начну эту работу.
create or replace procedure ASSIGN_PILOT (param_flno int, param_distance int, param_origin char) as
--get all pilot/aircraft combos that can make the trip (call it pilots)
CREATE TABLE pilots
AS
SELECT e.eid, ename, a.aid, cruisingrange
FROM employees1 e
INNER JOIN certified1 c
ON e.eid=c.eid
INNER JOIN aircraft a
ON c.aid=a.aid
ORDER BY cruisingrange ASC;
DECLARE
CURSOR pl_cur IS
SELECT * FROM pilots
ORDER BY cruisingrange ASC;
pl_row pilots%ROWTYPE;
is_assigned number;
BEGIN
DBMS_OUTPUT.PUT_LINE('hi from SP assign_pilot, param_flno = '||param_flno);
--loop cursor through pilots
FOR pl_row IN pl_cur LOOP
--see if the range is long enough
IF (pl_row.cruisingrange >= param_distance) THEN
--see if pilot is available (not present in flight_assignments)
SELECT COUNT(*)
INTO is_assigned
FROM flight_assignments FA
WHERE FA.eid = pl_row.eid;
--if pilot is available
IF(is_assigned = 0) THEN
--add fight to flight_assignments;
INSERT INTO flight_assignments(flno, aid, eid)
VALUES(param_flno, pl_cur.aid, pl_cur.eid);
END;
END IF;
END IF;
END LOOP;
--if we reach this point, no one is available.
--add flight to delayed_flights;
INSERT INTO delayed_flights
VALUES(param_flno);
END;
/
show errors;