728x90

ORA-00976: Specified pseudocolumn or operator not allowed here

 

Environment

  • Language: Oracle

 

Problem

    SELECT LEVEL-1 HOURS
           , NVL(COUNT(TO_CHAR(DATETIME, 'FMHH24')), 0) COUNT
      FROM DUAL 
RIGHT JOIN ANIMAL_OUTS
        ON (LEVEL-1) = TO_CHAR(DATETIME, 'FMHH24')
CONNECT BY LEVEL <= 24
  ORDER BY LEVEL
;

 

Cause of Problem

LEVEL 같은 의사컬럼이나 연산자가 허용되지 않는 위치에 사용됨
LEVEL 의사컬럼은 FROM 절에서 직접적으로 사용될 수 없고, CONNECT BY 절에서 계층형 쿼리를 구성할 때 사용되어야 함

  • pseudocolumn(의사컬럼): 테이블의 컬럼처럼 동작하지만 실제로 테이블에 저장되지는 않는 컬럼

 

Solution

  • LEVEL의 위치를 FROM절에서 CONNECT BY절로 이동
   SELECT LEVEL-1 HOURS
          , NVL(
              (SELECT COUNT(*)
                 FROM ANIMAL_OUTS
                WHERE TO_CHAR(DATETIME, 'HH24') = TO_CHAR(LEVEL-1, 'FM00')), 0) COUNT
      FROM DUAL
CONNECT BY LEVEL <= 24
  ORDER BY LEVEL
;

 

📚 참고 자료

 

728x90
728x90

🐬 기본 환경

- IDE: MySQL Workbench

- DataBase: MariaDB

 

 

🖨️경고

1
2
3
4
5
6
7
8
9
Connection Warning(rds-mini1)
 
incompatible/nonstandardd server version or connection protocol detected(10.6.14)
 
A connection to this database can be established but some MySQL Workbench features may not work properly since the database is not fully compatble with the supported versions of MySQL.
 
MySQL Workbench is developed and tested for MySQL Server versions 5.65.7 and 8.0. 
For MySQL Server older than 5.6, please use MySQL Workbench version 6.3.
 
 

 

 

📡 원인

WorkBench는 MySQL과 함께 동작하도록 만들어졌으므로, MariaDB에는 적합하지 않을 수 있음

 

 

📰 해결 방법

* MariaDB GUI Tool인 HeidiSQL 사용

 

 

 

📚 참고 자료

 

MySQL Workbench incompatible/nonstandard server

I am new to using MySQL and I needed to download it for school, however, I keep getting this error message (picture below). I am using xampp and connecting using the username root. the port also ma...

stackoverflow.com

 

 

[AWS RDS] MySQL Workbench 연결오류/호환성 경고

Cannot Connect to DataBase Server / Connection Warning

velog.io

 

728x90
728x90

👉 기본 환경

- Language: Oracle

 

 

⌨️ 코드

1
2
3
4
5
6
7
8
9
10
11
WITH SUB AS (
      SELECT TO_CHAR(DATETIME'FMHH24') AS HOUR
        FROM ANIMAL_OUTS
    GROUP BY TO_CHAR(DATETIME'FMHH24')
)
  SELECT HOUR, COUNT(*) AS COUNT
    FROM SUB
   WHERE HOUR BETWEEN 9 AND 19
ORDER BY TO_NUMBER(HOUR)
;
 
 

 

 

🖨️오류

ORA-00937: not a single-group group function

 

 

📡 원인

GROUP BY 절과 SELECT 절 사이에서 집계 함수가 필요한데, 그룹화되지 않은 열에 대해 집계 함수를 사용하지 않음

 

 

📰 해결 방법

1
2
3
4
5
6
7
8
9
10
11
12
WITH SUB AS (
      SELECT TO_CHAR(DATETIME'FMHH24') AS HOUR,
             COUNT(*) AS COUNT
        FROM ANIMAL_OUTS
    GROUP BY TO_CHAR(DATETIME'FMHH24')
)
  SELECT HOUR, COUNT
    FROM SUB
   WHERE HOUR BETWEEN 9 AND 19
ORDER BY TO_NUMBER(HOUR)
;
 
 

SELECT절에 집계함수 COUNT 추가

 

728x90
728x90

👉 기본 환경

- Language: Oracle

 

 

⌨️ 코드

1
2
3
4
5
6
  SELECT TO_CHAR(DATETIME'h24') HOUR, COUNT(*) COUNT
    FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME'h24')
ORDER BY HOUR
;
 
 

 

 

🖨️오류

ORA-01821: date format not recognized

 

 

📡 원인

TO_CHAR() DATE FROMAT에 'h24' 타입이 없음

 

 

📰 해결 방법

1
2
3
4
5
6
  SELECT TO_CHAR(DATETIME'hh24') HOUR, COUNT(*) COUNT
    FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME'hh24')
ORDER BY HOUR
;
 
 

TO_CHAR() DATE FROMAT에 있는 데이터 타입(hh24 - 24시간 표기) 사용

 

728x90
728x90

👉 기본 환경

- Language: Oracle

 

 

⌨️ 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
  SELECT B.TITLE, 
         B.BOARD_ID, 
         R.REPLY_ID, 
         R.WRITER_ID, 
         R.CONTENTS, 
         TO_CHAR(R.CREATED_DATE, 'YYYY-MM-DD') CREATED_DATE
    FROM USED_GOODS_BOARD B 
    JOIN USED_GOODS_REPLY R 
      ON B.BOARD_ID = R.BOARD_ID
   WHERE B.CREATED_DATE = 2022-10
ORDER BY R.CREATED_DATE, B.TITLE
;
 
 

 

 

🖨️오류

ORA-00932: inconsistent datatypes: expected DATE got NUMBER

 

 

📡 원인

DATE 데이터 유형을 숫자와 비교하려고 시도

Oracle에서는 DATE 형식의 날짜와 숫자 간의 직접적인 비교를 허용하지 않음

 

 

📰 해결 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
  SELECT B.TITLE, 
         B.BOARD_ID, 
         R.REPLY_ID, 
         R.WRITER_ID, 
         R.CONTENTS, 
         TO_CHAR(R.CREATED_DATE, 'YYYY-MM-DD') CREATED_DATE
    FROM USED_GOODS_BOARD B 
    JOIN USED_GOODS_REPLY R 
      ON B.BOARD_ID = R.BOARD_ID
   WHERE TO_CHAR(B.CREATED_DATE, 'YYYY-MM'= '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE
;
 
 

TO_CHAR()를 통한 문자열간 비교로 변경

 

728x90