2010-06-14 4 views
0

내가 오라클 테이블에서 다음 절차를 업데이트 할,하지만 오류를 던지고있다 :오라클 업데이트 절차 문제

CREATE OR REPLACE PROCEDURE update_keywords (aKEYWORD IN VARCHAR2, aCOUNT IN NUMBER) 
AS BEGIN 
    update searchable_keywords 
    set KEYWORD =:new.aKEYWORD or COUNT =:new.aCOUNT 
    where KEUWORD_ID = : old.KEYWORD_ID; 
    END; 

이 내 절차입니다. 나는 keyword_id (기본 키)로 searchable_keywords 테이블의 키워드 & 수를 업데이트하고 싶지만 다음과 같이 오류를 던지고있다 :

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
3/4  PL/SQL: SQL Statement ignored 
4/17  PLS-00049: bad bind variable 'NEW.AKEYWORD' 
4/31  PL/SQL: ORA-00933: SQL command not properly ended 
4/41  PLS-00049: bad bind variable 'NEW.ACOUNT' 

당신이 날이 문제를 해결하는 데 도움 주실 래요?

답변

5

이것은 트리거처럼 보입니다 ... acount/a 키워드에 ": new"가 필요하지 않으며 업데이트하려는 ID를 전달해야합니다. 예 :

CREATE OR REPLACE 
PROCEDURE UPDATE_KEYWORDS(
    AKEYWORD IN VARCHAR2, 
    ACOUNT  IN NUMBER, 
    AKEYWORD_ID IN NUMBER) 
AS 
BEGIN 
    UPDATE 
    SEARCHABLE_KEYWORDS 
    SET 
    KEYWORD = AKEYWORD 
    , "COUNT" = ACOUNT 
    WHERE 
    KEYWORD_ID = AKEYWORD_ID 
END; 

나는

.. 당신은 당신이 "또는"거기와의 분명히 잘못된 업데이트하는 다른 무언가를하려고 노력하지 않는 "COUNT"..라는 이름의 열이 왜 모르겠어요
+0

안녕하세요. 입력 매개 변수로 keyword_id를 사용하고 있지 않습니다 ..... 기본 ID이고 자동으로 증가합니다. – murali

+1

트리거 코드를 트리거에서 호출 할 프로 시저로 이동하려고합니까? 그렇다면 새 키워드와 오래된 키워드를 포함하여 텍스트를 트리거 코드 내에서만 의미있는대로 이동할 수 없습니다. –

+1

@murali - UPDATE 문을 발행 중입니다. 따라서 업데이트하려는 행의 액세스 경로를 알아야합니다. 따라서 프로 시저에 기본 키를 전달해야합니다. 행이 업데이트 될 때마다 기본 키를 실제로 증가시키지 않기를 바란다. – APC