2016-12-05 2 views
0

저장 프로 시저를 만들기 위해 스크립트를 실행할 수없는 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; 

답변

0

스토어드 프로 시저에서 테이블을 만들 수 없습니다. 테이블

0

생성 그러나 EXECUTE IMMEDIATE 에 저장 절차를 사용 가능하며, DBA는 명시 적으로 제공하는 GRANT CREATE TABLE TO <user>

CREATE OR REPLACE PROCEDURE tobedeleted 
IS 
BEGIN 
    EXECUTE IMMEDIATE 'CREATE TABLE TEST123 AS SELECT * FROM emp '; 
... 
... 
... 
END;