작은 따옴표 관련 궁금한 부분입니다. 0 3 1,861

by 생각 [PL/SQL] [2017.12.27 10:01:52]


안녕하세요. 사실 기초적인 질문이다보니 올리기도 어려워집니다.

아래는 상태가 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';

명쾌하게 알려주시면 고맙겠습니다.

연말 잘보내시고 행복하세요.

by 우리집아찌 [2017.12.27 13:10:04]

밑의 내용은 ALTER SYSTEM DISCONNECT SESSION ' ... ... ... '  POST_TRANSACTION 이렇게 표현될겁니다.

execute immediate 사용하셔도 에러 날것 같네요..

자동으로 락걸린것 세션 끊으시려고 하신것같은데요.  원하시는 결과가 아닐것이같은데요..

V_SQL := 'ALTER '|| i.OBJECT_TYPE || ' ' ||i.OBJECT_NAME|| ' COMPILE ';

컴파일 에러 나신다는데 잘모르겠네요. 

EXEC DBMS_DDL.alter_compile 패키지가 있으니 바꿔보심이..

 


by 그로밋 [2017.12.27 14:49:56]

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;


by 생각 [2017.12.27 17:41:09]

그로밋님,우리집아찌님 두분 답변 감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입