본문으로 바로가기

sqlite의 이용한 Save As 구현

category Tcl & Tk/팁 (Tip) 2025. 3. 24. 10:39

현재 Tcl 프로그램의 데이터 관리를 sqlite를 사용하여 관리하고 있습니다. 이것저것 신경 쓸 거 없어 좋네요. Save As를 구현하려다 보니 아래의 코드가 만들어졌습니다. src.sql 파일은 미리 존재해야 하고, 상황에 따라 파일을 복사해서 Save As를 구현해도 되지만, db1(src.sql) 이 열려 있는 상태에서는 아래와 같이 하는 방법이 좋은 것 같습니다.

#sqlite db1 "src.sql"
sqlite db2 "dest.sql"
db1 eval { SELECT name FROM sqlite_master WHERE type = "table" } row {
        set table $row(name)

        # 테이블 생성
        set query "PRAGMA table_info('$table');"
        set result [db1 eval $query]
        puts $result
        set query "CREATE TABLE $table ("
        foreach {cid name type null def pkey} $result {
                append query "$name $type, "
        }
        set query [string range $query 0 end-2]
        append query ")"

        db2 eval $query
       
        # 필드 값 삽입
        db1 eval "SELECT * FROM $table" row2 {
                set query "INSERT INTO $table VALUES("
                set columns $row2(*)
                set values [list]
                foreach column_name $columns {
                        append query "\"$row2($column_name)\", "
                }
                set query [string range $query 0 end-2]
                append query ")"
                db2 eval $query
               
        }
}

#db1 close
db2 close