티스토리 뷰
간단히 말하자면,
Oracle용 프로시저 언어로 여러가지 복수의 쿼리를 한번에 실행하기 위해 주로 쓰인다.
물론 반복, 분기처리가 가능하고 예외처리기능까지 갖추고있으며 컴파일까지 되기에 위와같이 이야기하면 많이 섭섭해할 테지만..크크
스케줄러에 등록해서 주기마다 실행하는 형태로 사용했었다. PV 정보를 필터를 통해 DB에 저장한 후 분석을 위해 프로시저를 등록하고 스케줄러로 12시 10분마다 실행하게 했었다. 프로시저 설계는 직접하지는 않고, 경력많은 분이 했었다.
단순히 SQL만을 실행하는 경우 유용하다고 생각하지만 실제 상용 서버에서 사용하기에는 운영상의 몇가지 문제가 있다고 생각한다. 웹서버등 외부 호출으로 프로시저를 실행할 수 있는데 이 경우 특히 Stored procedure라고 호칭한다.
1. 버그
스케줄러에 등록해서 쓰던게 멀쩡히 잘 되다가 갑자기 안된다. 지우고 다시 등록하니가 됐었다. 10i는 안써봐서 모르겠는데 그 이하 버전에서 종종 발생했다. 때문에 상용 DBMS서버를 세우고 패치까지 했었던 기억이 있다. 패치로 해결되었는지 그 이후 관여를 안해서 모르겠다. 오라클은 의외로 가끔 중대한 버그를 발생시키는데, 시퀀스 생성에도 종종 오류가 발생하는게 보고됐었다. 시퀀스를 신뢰할수 없어서 직접 생성해서 써야 한다고 고집하는 사람도 있었는데 그다지 동의하기엔 찝찝하다. 일반적으로 DBMS를 세우고 패치를 하는데 두려움을 갖는 경우가 많은데, 패치를 게을리 해서는 안된다고 생각한다. 간과하면 추후에 감당할수가 없다.
2. 로그
상용서비스를 하게 되면 반드시 챙겨야 하는 필수요소가 바로 '로그'인데 stored procedure를 사용하게되면 로그가 불명확해진다. 물론 DBMS 서버내 로그에 내역이 쌓이지만 웹어플리케이션 로그로 대부분의 로그를 모아 쓰는 경우가 일반적이므로 일원화가 어렵다.
3. 개발 일관성
비지니스 로직이 들어가는 경우가 발생하면 안된다. 상수라 생각했던게 변경될 경우 프로시저까지 챙기지 못한다면 큰 문제가 될 수 있다. 인수인계가 제대로 되지 않으면 프로시저로 만들어놓은게 어떤것이 있는지도 모를수도 있다.
따라서 요즘 많은 프로젝트에서는 Stored procedure를 아예 사용하지 않는 추세이나 익숙한 사람들에겐 간편한 언어이다.
MS-SQL에서는 t-SQL이라 하는 것과 같은 역할이다.
개인적으로 싫다.
오라클 PL/SQL 강좌
정리가 잘 되어있어 추천!
http://oracleclub.com/oracle/lecture/LectureHTML.jsp?lectureType=PLSQL