2017-01-24 4 views
1

pl/sql 프로그래밍을 처음 사용합니다. BREW는 BB_BASKETITEM 테이블의 QUANTITY 열에 점검 제한 조건을 추가하려고합니다. 구매자가 항목에 대해 20보다 큰 수량 값을 입력하면 Brewbean 's는 "수량 확인"메시지를 화면에 표시하려고합니다. 텍스트 편집기를 사용하여 Chapter04 폴더에서 assignment04-06.txt 파일을 엽니 다. 첫 번째 문인 ALTER TABLE을 실행하여 CHECK 제약 조건을 추가해야합니다. 다음 항목은이 항목을 테스트하는 INSERT 작업이 포함 된 PL/SQL 블록입니다 check 제약 조건을 체크하고이 제약 조건을 체크하고 메시지를 표시하는 코드를 추가하십시오. "inpl/sql에서 정의되지 않은 오류 예외 처리

ORA-06550 : 5 행, 1 열 : PLS-00103 :가 발생 상징 "ALTER" 는 나는이 같은 오류 보고서를 가지고 this-

set serveroutput on; 
declare 
ex_basket exception; 
pragma EXCEPTION_INIT(ex_basket, -02290); 
BEGIN 
ALTER TABLE bb_basketitem 
    ADD CONSTRAINT bitems_qty_ck CHECK (quantity < 20); 
    INSERT INTO bb_basketitem 
    VALUES (88,8,10.8,21,16,2,3); 
exception 
when ex_basket then 
DBMS_OUTPUT.PUT_LINE('Check Quantity'); 
END; 

같은 시도 중 하나를 기대하고 다음 루프 모드 널 프라그 인상이 업데이트를 선택 반환 경우

(경우 시작 고토에 대한 종료를 선언하면서

0,123,516로

죄송합니다.이 저렴한 질문입니다. 나는 이것을 돕는 누군가를 사랑합니다.

답변

1

SQL과 PL/SQL은 두 가지 다른 언어임을 이해해야합니다. ALTER TABLE은 PL/SQL이 아닌 SQL 문입니다. 정적 SQL DDL 문은 PL/SQL 블록 내에서 실행할 수 없습니다. 그러나 PL/SQL은 제공하는 많은 기능을 통해 SQL에 쉽게 통합됩니다. 이러한 기능 중 하나는 EXECUTE IMMEDIATE입니다.

EXECUTE IMMEDIATE 'ALTER TABLE bb_basketitem ADD CONSTRAINT bitems_qty_ck CHECK (quantity < 20);' 
0

이 당신의 코드를 매우보고 특정 말해서 :

따라서, 당신은 yoru이 이런 식으로 문을 ALTER DTO 변화가 필요합니다. 아래의 코드로 문제가 해결됩니다.

SET serveroutput ON; 
DECLARE 
    ex_basket EXCEPTION; 
    pragma EXCEPTION_INIT(ex_basket, -02290); 
BEGIN 
    EXECUTE IMMEDIATE 'ALTER TABLE bb_basketitem ADD CONSTRAINT bitems_qty_ck CHECK (quantity < 20);'; 
    INSERT INTO testab VALUES 
    (88 
    ); 
EXCEPTION 
WHEN ex_basket THEN 
    dbms_output.put_line('Check Quantity'); 
END; 
0

예외 처리와 관련해서는 런타임시 발생하는 문제입니다. 그러나 코드에 ALTER과 같은 인식 할 수없는 키워드가 있으면 처음부터 컴파일되지 않기 때문에 전혀 실행되지 않습니다. 대신 전체 블록이 유효하지 않은 것으로 간주됩니다.

dbms_output 또한 예외 처리에 일반적으로 좋은 선택이 아닙니다. 출력 버퍼에 디버그 메시지를 넣고 블록을 성공적으로 완료 할 수 있기 때문에이 스크립트의 일부분은 전혀 알 수 없으므로 뭔가 잘못 됐어. raise or raise_application_error을 사용해보세요.