2014-04-21 11 views
0

저장 프로 시저를 만드는 방법을 이해하는 데 문제가 있습니다. 대부분 매개 변수가 무엇인지 이해하는 데 문제가 있습니다. 나는 "SQL 명령이 제대로 끝나지 않았다"라는 오류를 계속 얻습니다.oracle sql 저장 프로 시저

나는 이것이 내 매개 변수 때문이라고 생각합니다. 두 개의 다른 열을 기반으로 판매 된 열을 업데이트하는 프로 시저를 만들려고합니다.

CREATE TABLE sales 
(
    price_per_unit NUMBER NOT NULL, 
    price_sold NUMBER NOT NULL, 
    sold NUMBER, 
    profit NUMBER 
); 

CREATE OR REPLACE PROCEDURE update_profit 
(
    price_per_unit NUMBER, 
    price_sold NUMBER, 
    sold NUMBER 
) 
AS 
BEGIN 
    UPDATE sales 
    SET profit = ((price_sold * sold) - (price_per_unit * sold)) 
    COMMIT; 
END; 
/

답변

2

구문 상 업데이트 구문의 끝에 세미콜론이 누락되었습니다. 또한 테이블에 PROFIT 열이 없으므로 세미콜론을 추가하면 업데이트가 컴파일되지 않습니다.

, 프로그램, 당신은 아마보기를 사용하여 훨씬 더 행복 할 겁니다 :

CREATE OR REPLACE VIEW SALES_V 
AS 
SELECT PRICE_PER_UNIT, 
     PRICE_SOLD, 
     SOLD, 
     ((PRICE_SOLD * SOLD) - (PRICE_PER_UNIT * SOLD)) PROFIT 
FROM SALES; 

나는 여전히 같은 오류를 얻고있다

+0

내 의견에 그 세미콜론을 놓쳤습니다. – TenG

+0

예 판매 된 매개 변수를 잊어 버렸고 변경했음을 알았습니다. – YellowSoloCup

+0

이 과제에 대한 절차가 필요합니다. 내 책은 광산이 오류를 발생시키는 것을 제외하고는 위의 절차를 정확하게 작성한 공식을 보여줍니다. – YellowSoloCup

0

매개 변수 목록에 구문 오류가 있습니다. 당신은 매개 변수 만 (IN)을 읽기 전용인지 여부를 지정해야합니다 전용 (OUT) 쓰기 또는 읽기 및 쓰기

변경

(
price_per_unit NUMBER, 
price_sold NUMBER 
) 

(
price_per_unit IN NUMBER, 
price_sold IN NUMBER 
) 

로 (에서).

보고 한 오류에 대해 코드 실행 방법을 말씀해 주시겠습니까? SQLPlus 또는 SQLDeveloper/TOAD?

+0

내가 추가 (물리적으로 저장 도출 된 결과는 일반적으로 나쁜 습관이다) IN 매개 변수에. – YellowSoloCup

+0

기본값은'in'입니다. 내 의견으로는 더 나은 방법이지만, 'in'키워드를 명시 적으로 포함 할 필요는 없습니다. – GriffeyDog