PL/SQL
-
[PostgreSQL] 커서를 활용하는 프로시저 만들기개발/Database 2020. 2. 16. 12:24
차세대 프로젝트에서 데이터 이관 작업을 하다 보니 타겟 목록을 SELECT 하여 커서에 담은 뒤, 커서의 크기만큼 반복문을 돌며 원하는 처리를 해주는 패턴이 굉장히 유용했다. 이번에도 우연한 기회에 PostgreSQL에서 비슷한 작업을 했는데, 내가 까먹을 것 같아서 기록해둔다. 오라클 프로시저와의 차이점은 약간의 문법 차이 정도만 있고, 거의 유사한 것 같다. (유의사항 : PostgreSQL 11에서부터 프로시저를 지원) 아래 예제는 실제 사용했던 프로시저를 포스팅용으로 많이 요약한 버전으로, student 테이블에서 grade가 1인 데이터를 추출하여 커서에 담은 뒤 커서를 반복문으로 돌리면서 student_2020 테이블에서 커서에 담은 데이터의 id와 동일한 로우의 grade를 2로 업데이트해준..
-
PL/SQL 실행 블럭에서 동적 쿼리 작성하기개발/Database 2018. 8. 8. 15:44
PL/SQL 내부에서 동적으로 스키마명과 테이블명을 받아 전체 데이터 건수를 뽑아내는 쿼리 결론부터 말하자면 쿼리 스트링을 만들어 준 다음에'EXECUTE IMMEDIATE 쿼리' 명령어를 추가해주면 된다. CREATE OR REPLACE FUNCTION F_TEST(P_S_NAME VARCHAR2, P_T_NAME VARCHAR2) --스키마명과 테이블명을 파라미터로 받음RETURN NUMBERISV_TMP NUMBER; --데이터 건수를 담아 리턴할 변수V_TMP_QUERY VARCHAR2(4000); --쿼리문을 담을 변수 BEGIN V_TMP_QUERY := 'SELECT COUNT(*) FROM ' || P_S_NAME || '.' || P_T_NAME ; --동적 쿼리 작성EXECUTE IMM..
-
PL/SQL 에서의 FUNCTION vs PROCEDURE개발/Database 2018. 8. 8. 15:19
FUNCTION 은 리턴값이 있는 서브프로그램이고,PROCEDURE 는 리턴값이 없는 서브프로그램이다. 사실 와꾸만 써놓고 정리를 안해서 안 올리고 있지만 VBA에서나 PL/SQL에서나 FUNCTION과 PROCEDURE 의 차이점은 거의 비슷하다....(내가 잘 몰라서 똑같다고는 말 못함) 직접 짜다보니 왜 프로그램이라는 명칭을 붙여줬는지 이해가 간다. 잘 써먹으면 정말 쪼그마한 프로그램 하나를 붙여서 쓰는 효과가 나기에...ㅎ 뭔소리야 아무튼 거의 2년간 PL/SQL을 만질 일이 없어서 까먹고 있다가 오랜만에 구문 보면서 짜려니 다른 분들의 설명이 잘 눈에 안 들어와서 내 맘대로 다시 정리한다.오늘도 출처는 훌륭한 구루비 선생님http://www.gurubee.net/lecture/1342http:/..
-
PL/SQL로 테이블 접근 시 ORA-00942 에러 원인개발/문제 해결 2018. 8. 8. 09:26
쿼리를 짜다보니 필요해서 어쩔 수 없이 DBA 계정에서 PL/SQL을 써서 새 함수를 짜넣고 테스트를 해보는데 계속 에러가 떴다. 더 이상 꼴도 보기 싫은 ORA-00942 ㅠㅠㅠㅠDBA 계정인데다가 SELECT * FROM 스키마.테이블; 하면 결과가 잘 나오기 때문에 설마 권한 문제라고는 생각 안했는데 권한 문제였음^.^ 찾아보니 PL/SQL 을 실행하게 되면 DBMS_SQL 패키지를 이용하게 되는데, 이때 명시적 접근 권한을 요구하기 때문에 DBA 계정일지라도 오류가 발생하는 것이라고 한다.바로 GRANT SELECT ON 스키마.테이블; 을 실행하고 나니 이상 없다. 즉. PL/SQL을 실행하려면 ROLE을 사용하여 부여된 권한이 아니라 직접 부여된 권한이 필요하다ㅠㅠ 출처 : http://juh..