Skip to content

Variables

Sangyong Bae edited this page Sep 23, 2026 · 2 revisions

변수

두 종류가 있습니다.

종류 문법 어디서 계산
바인드 변수 VARIABLE v NUMBER · EXEC :v := 값 · EXEC :v := 식 · 문장 안의 :v 리터럴 대입은 클라이언트(왕복 0) · 식은 서버 · 값은 진짜 바인드로 전달
치환 변수 DEFINE v = 글 · &v · &&v · ${v[:형식]} · ${env:이름} 클라이언트가 문장을 보내기 전에 글자로 바꿈

변수 안의 변수 — 언제 펴지나

DEFINE v1 = 2
DEFINE v2 = &v1 + 5
DEFINE v1 = 5
SELECT &v2 FROM dual;    -- 대입 시: 2 + 5 · 사용 시: 5 + 5

설정 Session ▸ 변수 안의 변수 확장 시점(vars.expand_at):

값 뜻
assign(기본) DEFINE할 때 바꿉니다(SQL*Plus · psql · sqlcmd와 같음). 나중에 v1을 바꿔도 v2는 그대로.
use 원문을 보관하고 쓸 때마다 재귀로 펴 줍니다(깊이 16 · 순환 참조는 오류). DEFINE 목록과 변수 창은 원문 → 현재 값으로 보여 줍니다. 바인드 식(EXEC :v2 := :v1 + 5)도 :v1이 바뀐 뒤 :v2를 쓰는 문장 앞에서 자동으로 다시 계산합니다(서버 왕복 1회 · 바뀌지 않았으면 0).

변수 창(View ▸ Variables)

바인드 변수(탭 층 · 연결 공유 층)와 치환 변수(&이름 · 타입 DEFINE)를 한 표에서 봅니다. 값을 고치면 다음 실행에 반영됩니다. 비밀로 보이는 이름(PASSWORD 등)은 가려집니다.

자주 쓰는 것

  • ${v:q} = SQL 글자 상수로 감싸기 · ${v:id} = 식별자 인용 · ${env:PATH} = OS 환경 변수.
  • SET DEFINE OFF = &를 글자로.
  • 스크립트 인자 &1 &2 … = nsql run file.sql arg1 arg2.

내장 변수 — ${workspaceFolder}처럼(설정 vars.intrinsic · 기본 켬)

앱이 아는 값을 VS Code와 같은 이름·문법으로 스크립트와 경로 설정(log.file · oracle.client_dir · oracle.tns_admin)에서 씁니다. 찾는 순서 = DEFINE 변수 → 내장 변수 → 글자 그대로, ${env:이름}은 내장 별칭(NSQL_*) → OS 환경 변수.

이름 값 별칭(${env:…}로도)
workspaceFolder · workspaceFolderBasename · workspaceFile · workspaceName 프로젝트 파일 폴더 · 그 이름 · 프로젝트 파일 · 프로젝트 이름(프로젝트가 없으면 없음) NSQL_PROJECT_DIR · NSQL_PROJECT_FILE · NSQL_PROJECT_NAME
workspaceFolder:이름 등록 폴더(마지막 폴더 이름으로) —
file · fileDirname · fileBasename · fileBasenameNoExtension · fileExtname · relativeFile · relativeFileDirname · fileWorkspaceFolder 활성 탭의 파일(미저장 스크립트면 없음) NSQL_FILE · NSQL_FILE_DIR · NSQL_FILE_NAME
lineNumber · columnNumber 캐럿(1 기준) —
userHome · nsqlHome · cwd · execPath · pathSeparator(=/) · os 홈 · 앱 설정 폴더 · 현재 폴더 · 실행 파일 · OS 구분자 · windows/macos/linux NSQL_USER_HOME · NSQL_HOME · NSQL_CWD · NSQL_EXEC · NSQL_OS
profile · dialect 활성 접속 프로필 이름 · 방언 NSQL_PROFILE · NSQL_DIALECT
config:키 설정 값(예 ${config:db.fetch_size}) —

형식 접미도 됩니다: ${fileBasename:q} = 'a.sql'. 모르는 이름·없는 문맥은 글자 그대로 남습니다(묻지 않음). CLI(nsql run)에는 프로젝트가 없어 ${workspaceFolder}가 없고 ${file}은 스크립트 경로입니다.

SPOOL ${workspaceFolder}/out/${fileBasenameNoExtension}.log
SELECT '${profile}' AS who, '${env:NSQL_PROJECT_DIR}' AS here FROM dual;

Clone this wiki locally