데이터베이스의 테이블을 기반으로 일부 업데이트 문을 생성해야합니다. 내가 필요한 업데이트 문을 생성하는 다음 스크립트를 만들었습니다. 그러나 그 스크립트를 실행하려고 할 때 내용물의 이스케이프 처리되지 않은 작은 따옴표에 관한 오류가 발생하며 oracle에서 특별한 의미를 갖는 & B, & T 문자가 발생합니다. SET DEFINE을 OFF로 설정하여 & B와 & T 문제를 처리했습니다. 콘텐츠 내에서 작은 따옴표를 이스케이프하는 가장 좋은 방법은 무엇입니까?Oracle 10g - 작은 따옴표를 이스케이프 처리하는 가장 좋은 방법
DECLARE
CURSOR C1 IS
SELECT * FROM EMPLOYEES;
BEGIN
FOR I IN C1
LOOP
DBMS_OUTPUT.PUT_LINE('UPDATE EMPLOYEES SET
FIRST_NAME= ''' || I.FIRST_NAME|| ''',
LAST_NAME = ''' || I.LAST_NAME ''',
DOB = ''' || I.DOB|| '''
WHERE EMPLOYEE_ID = ''' || I.EMPLOYEE_ID || ''';');
END LOOP;
END;
여기서 first_name 또는 last_name에 작은 따옴표가 포함되어 있으면 생성 된 업데이트 문이 중단됩니다. first_name과 last_name에서 작은 따옴표를 이스케이프하는 가장 좋은 방법은 무엇입니까?
@ 제프리 : 의견에 감사드립니다. 이 접근법의 유일한 단점은 NULL 값의 경우, first_name이 REPLACE (I.FIRST_NAME, '' ',' '' '' ')를 사용하여 테이블에서 NULL이 발생했다는 것을 의미합니다. 빈 문자열을 테이블에 삽입하는 것은 NULL과 같지 않다고 생각합니다. 그렇지 않니? 현재로서는 좀더 자세한 정보를 IF ... ELSE 검사를 NULL로 사용했는데 그렇지 않은 경우 q '(I.first_name)'등을 사용했습니다. 그 일. 다시 한 번 의견에 감사드립니다. – Dharam
아니요. Oracle에서 빈 문자열은 NULL과 같습니다. –
Q- 따옴표로 대체하는 방법이 불완전합니다. 단일 인용 부호는 생성 된 갱신 명령문에서 이스케이프 처리되지 않은 상태로 남아 있습니다. 다른 구분 기호로 _and_뿐만 아니라 텍스트 열을 래핑하려면 Q- 따옴표를 사용해야합니다. 예. '# FIRST_NAME #' '은 (는)'q {'# FIRST_NAME # '}'이어야합니다. –