Repository navigation
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). |
바인드 변수(탭 층 · 연결 공유 층)와 치환 변수(&이름 · 타입 DEFINE)를 한 표에서 봅니다. 값을 고치면 다음 실행에 반영됩니다. 비밀로 보이는 이름(PASSWORD 등)은 가려집니다.
-
${v:q}= SQL 글자 상수로 감싸기 ·${v:id}= 식별자 인용 ·${env:PATH}= OS 환경 변수. -
SET DEFINE OFF=&를 글자로. - 스크립트 인자
&1 &2 …=nsql run file.sql arg1 arg2.
앱이 아는 값을 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;