2014-05-09 1 views
0

아무도 도와 드릴 수 있습니까? 단추와 관련된 동적 동작을 사용하여 APEX에서이 코드를 실행하려고합니다.EXECUTE 즉치 및 SQL 업데이트

DECLARE 
sql_stmt VARCHAR2(200); 
BEGIN 
EXECUTE IMMEDIATE sql_stmt := 
'update dos_visits set visit_type = 'IMV'where  visit_type = 'SMV'' 
END; 

내가 이것을 위해 =와 오류를 얻고있다) ..

감사를 너무 많이, 그냥 테이블에 간단한 업데이트를하려고 노력하지만, 내 PL/SQL은 약하다!

+0

변화 'SMV'에 "SMV"당신은 – Satya

+0

@Satya을 통해, 자사의 정답 상점 약간 불분명하고 나던 핸들'IMV'을 먹으 렴해야합니다. 답변으로 게시하십시오. – paqogomez

답변

1

PL/SQL에서 문자열의 작은 따옴표를 이스케이프 처리하여 PL/SQL 엔진이 작은 따옴표의 존재를 나타내서 문자열을 끝내지 않음을 나타낼 수 있도록해야합니다. 변수 sql_stmt을 사용하려면 EXECUTE IMMEDIATE 호출과 별도의 단계에서 해당 변수에 값을 할당해야합니다.

이 여기에 동적 SQL을 사용하는 어떤 이유가 있지만,

DECLARE 
    sql_stmt VARCHAR2(200); 
BEGIN 
    sql_stmt := 'update dos_visits set visit_type = ''IMV'' where visit_type = ''SMV'''; 
    EXECUTE IMMEDIATE sql_stmt; 
END; 

가 표시되지 않습니다 (이 연속 2 따옴표가 아닌 단일 따옴표 문자 참고) 작동합니다. 그것은 일반적으로 당신은 아마 그 visit_type 값이 정말 하드 코딩하지 않는 한 쿼리에서 바인드 변수를 사용 싶어, 당신이 어떤 이유로 동적 SQL을 사용하려는 경우 정적 SQL

BEGIN 
    update dos_visits 
    set visit_type = 'IMV' 
    where visit_type = 'SMV'; 
END; 

를 사용하는 것이 더 나을 .

DECLARE 
    sql_stmt VARCHAR2(200); 
BEGIN 
    sql_stmt := 'update dos_visits set visit_type = :1 where visit_type = :2'; 
    EXECUTE IMMEDIATE sql_stmt 
    USING 'IMV', 'SMV'; 
END; 
+0

안녕하세요. 빠른 답변을 보내 주셔서 감사합니다. 구문에 도움을 주셔서 감사합니다. 것은 APEX에서 이것을 실행하면 전혀 업데이트되지 않고 열이 정확하고 값이 정확하며 표가 정확합니다. 이것이 어디에서 일어나고 있는지 확실하지 않습니다. – Ewaver

+1

@Everver - 업데이트로 변경 한 사항을 커밋 하시겠습니까? –

+0

괜찮아요 ... 미안 해요. 우선 DEV에 커밋을해야했습니다;) 다시 한번 감사드립니다. – Ewaver