Linux 在使用sqlite绑定的tcl中,“eval”命令没有对“附加数据库”执行任何操作

Linux 在使用sqlite绑定的tcl中,“eval”命令没有对“附加数据库”执行任何操作,linux,sqlite,tcl,redhat,Linux,Sqlite,Tcl,Redhat,我正在尝试使用tcl自动执行数据库连接,因为它是sqlite推荐的 我尝试评估创建表、插入和选择。它们都按预期工作,但不适用于附加数据库。 下面的脚本没有执行任何操作 #!/user/bin/tclsh load /usr/lib/sqlite3.20.1/libsqlite3.20.1.so Sqlite3 sqlite3 main_db /location1/dbfile.sqlite main_db eval { ATTACH DATABASE "/home/location2/db

我正在尝试使用tcl自动执行数据库连接,因为它是sqlite推荐的

我尝试评估创建表、插入和选择。它们都按预期工作,但不适用于附加数据库。 下面的脚本没有执行任何操作

#!/user/bin/tclsh
load /usr/lib/sqlite3.20.1/libsqlite3.20.1.so Sqlite3

sqlite3 main_db /location1/dbfile.sqlite
main_db eval { 
 ATTACH DATABASE "/home/location2/dbfile2.sqlite3" AS db; 
}
执行后,我没有看到附加的数据库


谢谢

我对SQLite文档的阅读意味着,附加到数据库只允许您在同一会话中通过在表名前面加上附加的数据库名来引用该数据库。我不认为附件意味着对原始数据库文件进行任何修改。因此,启动另一个过程来查看连接的效果不会显示任何内容。也许有其他方法可以解决您认为附加可以解决的问题。

它实际上按照预期工作,我检查它的方法是错误的

正如andy mango指出的,数据库附件的状态是每个会话,这意味着:

在控制台上的location1/dbfile上运行sqlite3是一个会话。 在location2/dbfile2上运行tcl脚本是一个单独的会话

附加数据库是在tcl会话上执行的。我在控制台会话上检查了附件的状态,但没有显示任何内容,因此脚本似乎无法工作

但它仍然有效,我就是这么做的:

#!/user/bin/tclsh
load /usr/lib/sqlite3.20.1/libsqlite3.20.1.so Sqlite3

sqlite3 main_db /location1/dbfile.sqlite
main_db eval { ATTACH DATABASE "/home/location2/dbfile2.sqlite3" AS db } 
main_db eval { INSERT INTO log VALUES(1, 'timetamp', 'event', 'remark')} # log is the table that already exists in location2/dbfile2
maindb close
我通过在控制台上为location2/dbfile2打开一个会话来验证它是否有效,添加的数据就在那里

其思想是使用tcl脚本在location1/dbfile上打开一个会话,然后将location2/dbfile2附加到该会话,以便连接到location1/dbfile的会话可以操作location2/dbfile2


其目的是使用触发器为location1/dbfile建立审核试用,但日志需要位于不同的位置。

您如何确定数据库未连接?执行脚本后,我在位置1的dbfile上打开了sqlite3控制台。然后我输入了数据库。只显示了main和temp,数据库不存在。也谢谢你看这个!你说得对,先生!它确实有效,我检查它的方式是错误的。我继续说,并假设它有效,添加了通常的后续步骤,结果如预期的那样。