2014-09-25 3 views
0

새 데이터 (col1='new values', col2='new 2 values')이있는 문자열을 전달할 테이블의 데이터를 업데이트하는 저장 프로 시저를 작성했습니다. 그러나 저장 프로 시저를 컴파일 할 때 오류가 발생합니다. - "누락 된 등호".SQL 프로 시저의 문 오류 업데이트

나는 다른 방법 (proc의 주석 처리 된 코드)으로 작업을 시도했지만 오류가 발생합니다.

CREATE OR REPLACE PROCEDURE "MY_UPDATE_PROC"(update_values IN VCHAR2,myid IN INT) 

sqlStmt VARCHAR2(1024); 

BEGIN 

UPDATE MY_TEST_TABLE SET update_values WHERE (TEST_Id = myid); 

--sqlStmt := 'UPDATE MY_TEST_TABLE SET ' || update_values || ' WHERE TEST_Id = ' ||myid ; 

-- EXECUTE sqlStmt; 

END; 
+0

'CHARVAR2'? 이게 뭐야? – zaratustra

답변

0

이 (테스트되지 않은)를보십시오 :

CREATE OR REPLACE PROCEDURE "MY_UPDATE_PROC"(update_values IN VARCHAR2, myid IN NUMBER) AS 
    sqlStmt VARCHAR2(1024); 
BEGIN 
    sqlStmt := 'UPDATE MY_TEST_TABLE SET ' || update_values || ' WHERE TEST_Id = ' || myid; 
    EXECUTE IMMEDIATE sqlStmt; 
END; 
/

첫 번째 매개 변수의 데이터 유형은 VARCHAR2 (게시물에 어쩌면 그냥 오타)해야 오라클에서 간단한 업데이트 문을

+0

죄송합니다. 오타입니다. – CrazyC

0

구문이다 :

Update <table_name> 
    set <column_name> = some_value 
where <conditions..> 

업데이트 진술은 누락되었습니다. = some_value 제공 할 d.

CREATE OR REPLACE PROCEDURE "MY_UPDATE_PROC"(p_update_values IN VARCHAR2, p_myid IN NUMBER) AS 
    sqlStmt VARCHAR2(1024); 
BEGIN 
    sqlStmt := 'UPDATE MY_TEST_TABLE SET col1 = :a WHERE TEST_Id = :b'; 
    EXECUTE IMMEDIATE sqlStmt USING p_update_values, p_myid; 
END; 
/

가 주목해야 할 :

1) 항상에 대한 열 이름이 아닌 있습니다 의미 있고 다른 이름을 사용하는이 경우에는 필요하지 않지만 동적 SQL을 사용하여

CREATE OR REPLACE PROCEDURE "MY_UPDATE_PROC"(P_update_values IN CHARVAR2, p_myid IN INT) 

BEGIN 

    UPDATE MY_TEST_TABLE 
    SET col1 = p_update_values 
    WHERE TEST_Id = p_myid; 

END; 
/

, 매개 변수.

2) 위의 예에서 바인드 변수 인 : a 및 : b를 사용하여 SQL 삽입을 방지하고이 프로 시저를 여러 번 호출 할 경우 전반적인 성능을 향상시킵니다.

+0

내 update_values에 col1 = 'Some Value', col2 = 'Some Value'가 포함됩니다. 이것으로 나는 들판의 수를 걱정하지 않을 것이다. 발신자가 처리해야합니다. – CrazyC

+0

다음 중 하나가 예상 될 때기호를 발견했습니다 : =,., @ ... – CrazyC

+0

@CrazyC : 매개 변수 "update_values"isn ' 단일 값, 완전한 SET 절입니다. 이 경우 바인드 변수에 할당하면 작동하지 않습니다. – DirkNM