26Z07e1

Young-Kyoo Kim·2026년 8월 7일
StarRocks CLI/MySQL 세션 내부에서 `PREPARE` / `EXECUTE` 구문이 동작하지 않을 때 원인을 찾고 해결하는 **SQL 단위 디버깅 방법**입니다.

---

### 1. `PREPARE` 세션 변수(`@var`) 값 실시간 검증

`EXECUTE ... USING` 시 변수가 비어 있거나 `NULL`이면 조건절이 동작하지 않습니다. 먼저 변수값이 제대로 생성되었는지 독립적으로 확인합니다.

```sql
-- 1) 변수 설정
SET @target_bucket = 'my-bucket';
SET @target_prefix = 'aoo';
SET @like_prefix = CONCAT(@target_prefix, '/%');

-- 2) [디버깅] 변수가 의도한 문자열로 결합되었는지 확인
SELECT @target_bucket, @target_prefix, @like_prefix;

2. 물음표(?) 개수 및 USING 순서 1:1 매핑 확인

PREPARE 문의 ? 바인딩 순서와 EXECUTE ... USING에 전달하는 변수의 순서 및 개수가 불일치하면 에러가 발생하거나 엉뚱한 결과가 조회됩니다.

-- [디버깅 체크] ? 개수 = 4개 / USING 변수 = 4개 (순서 일치 필수)
-- 1번 ? : @target_prefix (SELECT 절)
-- 2번 ? : @target_bucket (WHERE bucket =)
-- 3번 ? : @target_prefix (WHERE prefix =)
-- 4번 ? : @like_prefix    (WHERE prefix LIKE)

PREPARE stmt FROM '
    SELECT 
        bucket,
        ? AS target_prefix,
        SUM(total_object_count) AS total_object_count,
        SUM(total_size_bytes) AS total_size_bytes
    FROM v_prefix_summary
    WHERE bucket = ?
      AND (prefix = ? OR prefix LIKE ?)
    GROUP BY bucket;
';

EXECUTE stmt USING @target_prefix, @target_bucket, @target_prefix, @like_prefix;

3. StarRocks 버전에 따른 PREPARE 구문 구체적 에러 유형

  • Error 1064: Unexpected input PREPARE: StarRocks FE 버전 문제로 SQL 레코드 수준의 PREPARE 구문을 지원하지 않거나 세션 설정이 꺼져있는 경우입니다.
  • Error 1210: Incorrect arguments to EXECUTE: ? 개수와 USING 뒤의 변수 개수가 일치하지 않을 때 발생합니다.
  • 해제 후 재시도: 기존 구문명이 남아있다면 명시적으로 메모리에서 해제한 뒤 다시 실행합니다.
DEALLOCATE PREPARE stmt;

4. [StarRocks 추천 방식] PREPARE 없이 세션 변수 직접 바인딩

StarRocks는 MySQL과 달리 일반 SELECT 쿼리문 안에서 세션 변수(@var)를 직접 참조 및 연산하는 방식을 완벽히 지원합니다. PREPARE / EXECUTE 복잡도를 거치지 않고 아래와 같이 실행하는 것이 디버깅과 가독성 면에서 훨씬 유리합니다.

-- 세션 변수 지정
SET @bucket = 'my-bucket';
SET @prefix = 'aoo';

-- PREPARE 없이 세션 변수를 직접 바인딩하여 실행
SELECT 
    bucket,
    @prefix AS target_prefix,
    SUM(total_object_count) AS total_object_count,
    SUM(total_size_bytes) AS total_size_bytes
FROM v_prefix_summary
WHERE bucket = @bucket
  AND (prefix = @prefix OR prefix LIKE CONCAT(@prefix, '/%'))
GROUP BY bucket;

0개의 댓글