>>최재혁 님께서 쓰시길<<
:: 안녕하세요.게시판에 처음으로 글을 올립니다.
:: proc*c 에서 커서를 이용해서 만들고 있는데요.
::
:: func A()
:: {
:: . . .
::
:: EXEC SQL PREPARE my_cursor FROM :statement;
:: EXEC SQL DECLARE my_stmt CURSOR FOR my_cursor;
:: EXEC SQL OPEN my_stmt;
::
:: ...
:: }
::
:: 이런식을 쓰잔아요.
::
:: 근데 저런 식으로 여러 함수에서 사용하거든요.
:: 예를 들어 A라는 함수에도 사용하고 ,다음과 같이 B 라는 함수에사 A에서 쓰인 변수(?) 이름을 똑같이
:: my_cursor, my_stmt 다음과 같이 사용하였습니다.
::
:: func B()
:: {
:: ...
::
:: EXEC SQL PREPARE my_cursor FROM :statement;
:: EXEC SQL DECLARE my_stmt CURSOR FOR my_cursor;
:: EXEC SQL OPEN my_stmt;
::
:: ...
:: }
::
:: 각기 다른 함수에서 선언을 했는데요.
:: redefine 되었다구 precompiler에서 에러가 나거든요.
::
:: 다른 이름으로 바꿔서 사용하고 있지만, 뭔가 미심적어서요. 커서를 여러개 사용하면 메모리 문제가
:: 생기지 않을까하구요. <-- 다른 함수들즉 name scope( {} )이 다른 곳에서 선언된 커서들이 왜 다른 함
:: 수들에까지 영향을 끼치는 지 궁금해서요. 원래 커서는 전역변수 처럼 사용되는 것인가요? (아님 제가
:: 잘못쓴건가요..)
:: 또, 여러개의 커서이름으로 사용해서 메모리엔 문제가 없는것인가요?
음... 저도 비슷한 사태(?)를 경험했어여.. 4개의 다른 함수에서 같은 이름으로 커서를 선언하니까 그런 말을 하더군여.. 그래서 저도 위의 님처럼 하나씩 딴 이름 줬습니다..
그래서 함 생각해 보니.. Pro*C compiler는 C compiler랑 별개로 움직이더군여.. 그래서 C의 scope와는 상관 없이 자기 기준에서 같은 이름이 두 개 사용되었다고 그런 말을 하는 거 같더군요.. 그로 인해서 인지 C의 "(X) ? (Y) : (Z)"를 사용할 수 업죠.. ':' 이게 host variable을 표시할 때 쓰기 때문에 뒤에 변수이름이 와야한다고 우기죠...
실재로 Pro*C를 거친 C코드를 보니까 global은 아니구여..메모리에 관한 문제는 없을 겁니다.. global이 아닌 이상 그 함수가 수행되기 전에는 필요가 없다거나 여유가 있지 않는 한 메모리를 차지하지 않을 거고.. 종료되면 OS가 알아서 비우던지..아님 여유가 있으면 그냥 두겠져..
|