2014-04-20 1 views
0

사용자에게 데이터베이스에 추가 할 정보를 묻는 swl 스크립트를 만들려고합니다. 사용자에게 상점 이름과 날짜를 묻습니다. 사용자가 상점 이름을 입력하면 해당 상점 이름과 연관된 코드를 리턴하고이를 변수에 지정하는 조회를 실행하려고합니다. 나는이 스크립트를 실행하면 사용자가 상점 이름을 입력 한 후, 다음과 같은 절차가 진행됩니다DB에 추가 할 정보를 얻는 SQL 스크립트

Enter the date of the expense:01-01-13 
Enter the store name for which the expense was against:MetEd 
    12 

나는 SQL 스크립트를 작성하는 새로운 오전으로 내가 잘못 뭐하는 거지 모르겠습니다. 아래는 내 스크립트 파일입니다. 어떤 도움이나 팁을 주셔서 감사합니다. 고맙습니다. 추신 : 나는 SQL plus/oracle을 재미있게 익혔습니다.

ACCEPT EDate PROMPT 'Enter the date of the expense:'; 
ACCEPT StoreName PROMPT 'Enter the store name for which the expense was against:'; 

DECLARE 
    v_StoreCode VARCHAR; 
BEGIN 
    SELECT CODE 
    INTO v_StoreCode 
    FROM STORE 
    WHERE STORENAME = '&StoreName'; 
END; 

INSERT INTO EXPMAST (ExpNum, EDate, StoreCode) 
    VALUES(seq_EXPMAST.nextval, to_date('&EDate','mm-dd-yy'), 'v_StoreCode'); 

답변

1

입력하라는 메시지가 표시되므로 12은 줄 번호입니다. SQL * Plus는 새 줄의 /이 익명 블록을 실행할 것으로 예상합니다. 귀하의 스크립트는 그것을 가지고 있지 않습니다. 따라서 프롬프트.

다른 문제가 있습니다. 나는 당신이 CODE의 검색된 값을 삽입하려고한다고 가정하지만 지금은 문자열 'v_StoreCode'을 삽입하고있다. 따라서 작은 따옴표를 제거해야합니다.

또한
ACCEPT EDate PROMPT 'Enter the date of the expense:'; 
ACCEPT StoreName PROMPT 'Enter the store name for which the expense was against:'; 

DECLARE 
    v_StoreCode VARCHAR; 
BEGIN 
    SELECT CODE 
    INTO v_StoreCode 
    FROM STORE 
    WHERE STORENAME = '&StoreName'; 
END; 
/

INSERT INTO EXPMAST (ExpNum, EDate, StoreCode) 
    VALUES(seq_EXPMAST.nextval, to_date('&EDate','mm-dd-yy'), v_StoreCode); 

당신이 INSERT를 사용하여 코드를 정리할 수 ... SELECT 구문 :

ACCEPT EDate PROMPT 'Enter the date of the expense:'; 
ACCEPT StoreName PROMPT 'Enter the store name for which the expense was against:'; 

INSERT INTO EXPMAST (ExpNum, EDate, StoreCode) 
    SELECT seq_EXPMAST.nextval, to_date('&EDate','mm-dd-yy'), CODE 
    FROM STORE 
    WHERE STORENAME = '&StoreName';