SQL
-
[MySQL] MySQL에서 ROW_NUMBER 사용하기개발/Database 2019. 2. 19. 17:43
오라클, 티베로..등에서 쿼리를 짤 때 툭하면 ROW_NUMBER() OVER 를 줘서 뽑다가 MySQL로 오니 당연히 신택스 에러가 떨어진다. MySQL에서는 특이하게도 SELECT 절에서 function 을 활용한다거나 이런 방식이 아니라변수를 선언하고 이 변수에 1씩 더해서 뽑아내는 방식으로 Row num을 줄 수 있다. 알고보니 MySQL에서는 쿼리에서도 변수를 선언해서 사용할 수 있고이걸 응용해서 뽑아내는 것 같다. 일단 쿼리를 보자면 요렇게 123456789101112SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM ,TB.* FROM ( SELECT NOTE_NO ,NOTE_TITLE ,NOTE_CONTENTS FROM EXAMPLE.NOTE ORDER BY NOTE_N..
-
[postgreSQL] 멀쩡한 컬럼인데 column does not exist 오류가 발생할 때개발/Database 2019. 1. 17. 09:37
이번에 시작한 토이 플젝에는 한번도 안 써본 디비를 써보자! 해서 야심차게 postgreSQL을 도입하지만 처음 짜넣은 아주 간단한 select 문 실행에서부터 막혀버렸다ㅠ.ㅠ SELECT COUNT(*) FROM V WHERE VOCA = #{voca} 라는 아주 아주 간단한 쿼리 문인데도 에러가 뜨면서 Column 'voca' does not exist 라고 찍힌다. 대체 왜??? 혹시나 오타가 났나 싶어서 다시 들여다봤지만 오타도 아니었다. 검색해보니 내가 지금까지 써본 DB는 대문자가 기본이고, 컬럼이나 테이블명에서는 대소문자 구별이 없어서 쿼리 짤 때 대문자로 쓰든 소문자로 쓰든 상관이 없었으나postgreSQL은 소문자가 기본인게 모든 것의 원인이었다..... (출처 : https://post..
-
TABLE Function 이라는 것도 있다개발/Database 2019. 1. 9. 14:20
DB 담당 수석님께서 짜서 던져주신 쿼리를 보다가 난생 처음 보는 신택스를 만나서 검색오늘도 출처는 구루비 (http://www.gurubee.net/lecture/2238) 아직 내용을 완벽하게 이해한 것이 아니라 간단하게 요약만 남기고 끝낸다...흐흑 Table Function - Result Set 전체를 인자 값으로 받아서 결과를 Return 하고자 할 경우 유용하게 사용 가능 - Table Function / Pipelined Table Function - SELECT * FROM TABLE( Row 출력 Function ) 형태로 사용 가능
-
데이터베이스의 SYNONYM 은 뭐하는 놈일까개발/Database 2018. 9. 7. 09:20
오늘도 출처는 구루비와 오라클 공식 문서 출처 : http://www.gurubee.net/lecture/1038 https://docs.oracle.com/apps/search/search.jsp?word=SYNONYM&product=b28359-01&book=b28286 SYNONYM이란? - 테이블, 뷰, 시퀀스, 오퍼레이터, 프로시저, 패키지 등 객체에 대한 별칭 - 객체에 대한 직접적인 참조 - 객체의 실제 이름과 소유자, 위치를 감춰 데이터베이스 보안 개선 가능 - 객체의 Public Access 를 제공 - 객체의 긴 이름을 사용하기 편한 짧은 이름으로 해서 SQL문을 단순화 할 수 있음 - 참조하고 있는 객체의 이름이 바뀌거나 이동했을 때, 해당 객체를 사용하는 SQL 문을 모두 고칠 필요..
-
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..
-
SQL을 활용해서 스네이크 케이스를 카멜 케이스로 바꾸기개발/Database 2018. 7. 26. 16:51
INITCAP() 이라는 함수를 써서 쉽게 바꿔줄 수 있다.물론 딸랑 INITCAP() 하나만 써서는 안되고 다른 함수들을 같이 섞어서 써주면 가능 결론만 먼저 말하자면 아래처럼 쓰면 된당SUBSTR ( REPLACE ( INITCAP ( '1' || 대상문자열 ), '_' ), 2) 이제 안에서부터 하나씩 쪼개보겠음 1. INITCAP() - 대상 문자열에서 각 단어의 첫 글자만 대문자로, 나머지는 소문자로 변환 - '1' || 'ABC_DEF_GHI' 로 문자열 앞에 '1' 은 왜 붙였나? ∵ INITCAP 을 쓰면 무조건 단어의 첫글자를 대문자로 변환해주는데, 카멜 케이스는 맨 앞 단어의 첫 글자는 소문자가 되야 하기 때문에 앞에 다른 문자를 아무거나 붙여서 맨 앞 단어의 첫 글자가 대문자가 되는 ..
-
나도 WITH절을 써보자개발/Database 2018. 7. 26. 13:50
출처는 내 영혼의 구원자 구루비 http://wiki.gurubee.net/pages/viewpage.action?pageId=27427118 http://www.gurubee.net/lecture/1505 http://wiki.gurubee.net/pages/viewpage.action?pageId=27427116 1. WITH절 사용 시 장점 = 데이터 중복 액세스 제거- SQL에서 동일한 데이터를 반복 처리할 경우, 성능개선방법으로 WITH절을 많이 활용- 데이터 건수는 적으나 데이터 추출 시 I/O 처리량이 많은 경우에 효과적- 여러 부분에 사용될 데이터를 1회 추출하여 Global Temporary Table 에 저장하고, 요청 시 저장된 데이터만 읽어 처리하면 되므로 SQL 성능 개선 및 I/..
-
DELETE VS TRUNCATE VS DROP개발/Database 2018. 7. 26. 11:20
요즘 쿼리 짜기에 재미를 붙여서 신나게 쿼리를 뚱땅뚱땅 만들고 있는데INSERT 쿼리문이 시작하기 전에 TRUNCATE 문을 붙여주라는 명을 받았다. 그러고보니 CREATE TABLE...시작 전에는 DROP TABLE.... 을 붙여주고INSERT INTO... 시작 전에 TRUNCATE...를 붙여주는걸 스크립트에서 종종 발견했다.무슨 차이인지 검색해보니 이미 너무 알아보기 쉽게 잘 정리된 것이 있어서 퍼옴 출처 : https://wikidocs.net/4021 * DELETE, TRUNCATE, DROP 명령어의 차이점 이 그림을 보면 정말 명확하게 차이점이 드러난다. 1. DELETE - 데이터만 지워지고 테이블 용량과 인덱스 등은 삭제되지 않음 - WHERE 조건을 걸어 특정 데이터만 삭제 가능..