안녕하세요. 사실 기초적인 질문이다보니 올리기도 어려워집니다.
아래는 상태가 INVALID 된 함수, 프로시저등을 컴파일 시키는 프로시저 내용 중 한줄입니다.
여기서 궁금한것이 작은따옴표(',') 묶음이 어떤 규칙으로 이뤄지는지 궁금합니다.
V_SQL := 'ALTER '|| i.OBJECT_TYPE || ' ' ||i.OBJECT_NAME|| ' COMPILE ';
위 코드는 컴파일 오류가 발생합니다.
아래 코드를 살펴보면 '''|| ~ ||''' 으로 이뤄지는데 컴파일 문제가 없습니다.
V_SQL := 'ALTER SYSTEM DISCONNECT SESSION '''||X.SID ||','||X.SERIAL# ||', @'||X.INST_ID ||'''POST_TRANSACTION';
명쾌하게 알려주시면 고맙겠습니다.
연말 잘보내시고 행복하세요.
밑의 내용은 ALTER SYSTEM DISCONNECT SESSION ' ... ... ... ' POST_TRANSACTION 이렇게 표현될겁니다.
execute immediate 사용하셔도 에러 날것 같네요..
자동으로 락걸린것 세션 끊으시려고 하신것같은데요. 원하시는 결과가 아닐것이같은데요..
V_SQL := 'ALTER '|| i.OBJECT_TYPE || ' ' ||i.OBJECT_NAME|| ' COMPILE ';
컴파일 에러 나신다는데 잘모르겠네요.
EXEC DBMS_DDL.alter_compile 패키지가 있으니 바꿔보심이..
1. 오라클 디비에서, 작은 따옴표(')는 string을 표현할때 쓰입니다.
따라서, 작은 따옴표가 들어가는 string을 표현하려면, 두개를 동시에 써야합니다.
create table test (str varchar2(10));
"Let's go." 라는 string을 따옴표를 써서 저장하려면 다음과 같이 해야 합니다.
insert into test values ('Let''s go.');
2.
두 번째 DDL의 문법(syntax)은 다음과 같이 원래 따옴표가 포함되어 있습니다.
ALTER SYSTEM DISCONNECT SESSION 'sid,serial#,@inst_id' POST_TRANSACTION;
여기에 포함된 따옴표들을 표현하기 위해 'ALTER ~ '''|| ~ ||''' ~ TRANSACTION' 으로 이뤄진 것입니다.
3.
첫 번째 DDL의 문법은 원래 따옴표가 없습니다.
ALTER object_type object_name COMPILE;
어떤 에러가 나는지, 무엇 때문에 에러가 나는지 다시 살펴 보세요. 예를 들어, owner를 포함 시켜야 하는지 문법이 틀린지를 확인 하시기 바랍니다.
다른 schema owner의 object를 컴파일 할 경우에는 syntax가 다음과 같읍니다.
ALTER object_type owner.object_name COMPILE;
object_type에 따라 syntax가 달라 질수 있읍니다. 예를 들어, PACKAGE BODY인 경우에는
ALTER PACKAGE owner.object_name COMPILE BODY;