your programing

PLS-00103: 다음 중 하나를 예상할 때 "파일 끝" 기호가 발생했습니다.;

lovepro 2023. 6. 11. 21:30
반응형

PLS-00103: 다음 중 하나를 예상할 때 "파일 끝" 기호가 발생했습니다.;

다음 스크립트를 실행 중입니다.

BEGIN
    select department_name 
    from egpl_department 
    where department_id in (select department_id 
                            from egpl_casemgmt_activity);
END ;

그리고 오류가 발생했습니다.

PLS-00103: Encountered the symbol "end-of-file" when 
expecting one of the following: 
;

PL에는 PL/SQL " "select " select "가 있어야 합니다.into절:

DECLARE
 v_department egpl_department.department_name%type;
BEGIN 
  select department_name 
  into   v_department
  from   egpl_department 
  where  department_id in (select department_id from egpl_casemgmt_activity); 

  -- Do something useful with v_department
END; 

PLS-00103항상 구문 오류가 발생했기 때문에 컴파일러가 헐거움을 의미합니다.메시지 텍스트에 다음과 같은 내용이 표시되면 매우 유용할 것입니다.You have made a syntax error, please check your code하지만 그렇지 않습니다.

어쨌든 이 경우 오류는 PL/SQL에서 select 문이 변수를 채워야 한다는 것입니다.이는 T-SQL과는 다른 동작입니다.따라서 쿼리의 투영과 일치하는 변수를 정의하고 해당 변수를 선택해야 합니다.

Oracle 문서는 포괄적이고 온라인으로 제공됩니다.여기에서 SQL 쿼리를 PL/SQL로 통합하는 섹션을 찾을 수 있습니다.다음 질문을 미연에 방지하기 위해 이 책을 읽으시길 권합니다.왜냐하면 간단한 구문 boomer를 수정하면 TOO_MANY_ROWS를 누를 것이기 때문입니다(부서가 두 개 이상이라고 가정).

PL/SQL에서는 일부 데이터만 선택할 수 없습니다.결과는 어디로 가야 합니까?

옵션은 다음과 같습니다.

  • 제다한을 합니다.BEGIN그리고.ENDSQL*plus와 함께 SELECT를 실행하거나 SQL 문을 실행하고 결과를 표시할 수 있는 기타 도구를 실행합니다.

  • 사용하다SELECT department_name INTO dep_namePL행을 ) PL/SQL 파일(SELECT 파일)

  • 사용하다SELECT department_name BULK COLLECT INTO dep_name_table결과를 PL/SQL 표에 넣는 방법(여러 행에 대해 작동)

또는 어떤 환경에서 SQL 또는 PL/SQL 코드를 실행할 것인지 설명할 수 있습니다.

too_many_rows 문제를 피하기 위해 커서를 사용할 수 있습니다. (나는 이것을 테스트하지 않았지만, 이 줄을 따라)

DECLARE 

 v_department egpl_department.department_name%type;

 cursor c_dept IS
  select department_name 
  into   v_department
  from   egpl_department 
  where  department_id in (select department_id from egpl_casemgmt_activity)
  order by department_name; 

BEGIN 

  OPEN c_dept;
  FETCH c_dept INTO v_department;
  CLOSE c_dept;

  -- do something with v_department

END;

이렇게 하면 테이블에서 찾은 첫 번째 값이 v_department에 저장됩니다.ORDER BY 절을 사용하여 반환된 행이 두 개의 다른 값일 가능성이 있다고 가정할 때 필요한 행인지 확인합니다.

대부분의 사람들은 그 전화가 문제라고 생각하지 않을 것입니다.

하지만 Oracle SQL Developer에는 이 문제를 에뮬레이트할 수 있는 재미있는 버그가 있습니다.

exec dbowner.sp1 ( p1, p2, p3); -- notes about the fields

오류 보고서 - ORA-06550: 줄 1, 열 362: PLS-00103: 다음 중 하나가 예상될 때 "파일 끝" 기호가 발생했습니다.

begin case 선언 종료 예외 종료 for goto if loop mod null pragma raise 반환 선택 업데이트를 선택하는 동안 << close current delete fetch lock insert open rollback savepoint set sql execute for all merge pipe 06550.00000 - "라인 %s, 열 %s:\n%s" *원인: 일반적으로 PL/SQL 컴파일 오류입니다.*조치:

exec dbowner.sp1 ( p1, p2, p3); 
-- notes about the fields

PL/SQL 프로시저가 성공적으로 완료되었습니다.

DELPARE는 익명 PL/SQL 블록 및 중첩된 PL/SQL 블록에서만 사용됩니다.

프로시저가 중첩된 PL/SQL 블록인 경우를 제외하고 프로시저 블록에서 새 변수를 '도입'하기 전에 DELARE 키워드를 사용할 필요가 없습니다.

아래의 'DELCARE' 키워드 없이 변수를 선언하는 방법의 예입니다.

예;

CREATE OR REPLACE PROCEDURE EXAMPLE( A IN NUMBER, B OUT VARCHAR2 )
IS  
  num1 number;
BEGIN  
  num1:=1;
  insert into a (year) values(7);    
END; 

이 질문/답변이 더 잘 설명됩니다.

오라클에서 프로시저 생성

언급URL : https://stackoverflow.com/questions/6967543/pls-00103-encountered-the-symbol-end-of-file-when-expecting-one-of-the-follow

반응형