作家指令

下面列出的指令是由SQLite3编写器处理的。显示的后缀以当前前缀< WriterKeyword >在映射文件中。默认情况下,< WriterKeyword >SQLite3编写器的SQLITE3

数据集

要求/可选:要求

数据集指令的操作方式与SQLite3读取器的操作方式相同。

工作台参数:目标SQLite3数据库文件

DEF

要求/可选:要求

每个SQLite3表都必须在写入之前定义。SQLite3定义语句的一般形式是:

SQLITE3_DEF  \ [sqlite3_update_key_columns ] \ [sqlite3_drop_table (yes|no)] \ [sqlite3_truncate_table (yes|no)] \ [sqlite3_table_writer_mode (inherit_from_writer|insert| update|delete)] \ [ [,]]+

当目标表不存在时,表定义指定要创建的表。当目标表存在且未被删除时,列出的字段和类型应与现有表的字段和类型匹配。

表定义中不匹配任何现有列的字段将被写入器忽略。在哪里< fieldType >,则它应该是目标数据库支持的字段类型。

定义行上的配置参数如下表所示:

参数

内容

的表

要写入的表的名称。如果存在指定名称的表,如果sqlite3_drop_table DEF line参数设置为YES,则会覆盖该表;如果sqlite3_truncate_table DEF line参数设置为YES,则会截断该表。否则,表将被追加。表名的有效值包括任何不包含sql攻击字符的字符串(“是SQLite中唯一的sql攻击字符),长度小于255个字符。

sqlite3_table_writer_
模式

根据发送到数据库的SQL语句的类型,特性类型的默认操作模式。有效的值是INSERT、UPDATE、DELETE和INHERIT_FROM_WRITER。注意,INSERT模式只允许INSERT操作,而UPDATE和DELETE可以在特性级别覆盖。INHERIT_FROM_WRITER只是指示从写入器级别获取这个值,而不是在特性类型级别覆盖它。

默认值:INHERIT_FROM_WRITER

sqlite3_update_key_

这是一个用逗号分隔的列列表,这些列与相应的FME属性值相匹配,以指定当写入器模式为UPDATE或INSERT时要更新或删除哪些行。

例如:

sqlite3_update_key_columns ID

将指示编写器确保ID属性始终与具有相同名称的列匹配。同样,目标表总是DEF行中指定的特性类型。

使用sqlite3_update_key_columns关键字列出的每一列都必须在DEF行上用类型定义,此外还有将由该操作更新其值的列。

sqlite3_drop_table

这指定如果表以此名称存在,则应该删除它,并用此定义指定的表替换。

默认值:无

sqlite3_truncate_table

这指定如果表以这个名称存在,那么在写入之前应该清除它。

默认值:无

字段名

要写入的字段的名称。字段名的有效值包括任何不包含sql攻击字符的字符串(“是SQLite中唯一的sql攻击字符),长度小于255个字符。

fieldType

表中列的类型。字段类型的有效值如下所示:

浮动

整数

真正的(宽度、小数)

文本

varchar(宽度)

indexType

要为列创建的索引类型。

如果该表以前不存在,那么在创建表时,将创建指定类型的数据库索引。数据库索引只包含一个列。

列类型的有效值如下所示:

索引:没有约束的索引。

unique:具有唯一约束的索引。

START_TRANSACTION

要求/可选:可选

这条语句告诉SQLite3编写器模块何时开始将特性实际写入数据库。SQLite3编写器不会编写任何特性,直到到达属于它的特性<上次成功的交易> + 1.指定值为0将导致输出每个特性。通常,指定的值是零—只有在数据加载操作在失败中途恢复时才指定非零值。

参数

内容

去年成功的事务> <

最后一个成功的事务的事务号。第一次加载数据时,将该值设置为0

默认值:0

例子:

SQLITE3_START_TRANSACTION 0

工作台参数:开始交易

TRANSACTION_INTERVAL

要求/可选:可选

在事务提交到数据库之前,该语句通知FME在每个事务中放置的特性的数量。

如果SQLITE3_TRANSACTION_INTERVAL语句未指定,则使用值500作为事务间隔。

参数

内容

< transaction_interval >

单个事务中的特性数量。

默认值:500

如果SQLITE3_TRANSACTION_INTERVAL设置为零,则使用基于特性的事务。当编写器处理每个特性时,会检查它们是否调用了一个属性fme_db_transaction.该属性的值指定写入器是否应该提交或回滚当前事务。属性的值可以是COMMIT_BEFORECOMMIT_AFTERROLLBACK_AFTER忽略.如果fme_db_transaction属性未在任何特性中设置,则整个写入操作在单个事务中发生。

例子:

SQLITE3_TRANSACTION_INTERVAL 5000

工作台参数:交易时间间隔

WRITER_MODE

要求/可选:可选

注意:有关此指令的更多信息,请参阅本章数据库作家模式

该指令通知SQLite3编写器默认情况下该编写器将执行哪些SQL操作。该操作可以设置为插入、更新删除.此操作的默认写入器级别值可以在特性类型或表级别被覆盖。对应的特征类型DEF参数名被调用sqlite3_table_writer_mode.它具有与写入器级别模式和附加值相同的有效选项INHERIT_FROM_WRITER这导致写入器级别模式被特性类型继承,作为该表中包含的特性的默认模式。

属性也可以为个别特性专门设置操作fme_db_operation属性。请注意,当写入器模式设置为时插入这可以防止模式从单个特征被解释,并且除非另有标记,否则所有特征都会被插入更新删除特性。这些都是跳过。

如果SQLITE3_WRITER_MODE语句未指定,则为插入是给定的。

参数

内容

< writer_mode >

编写器应该执行的SQL操作的类型。以下是有效的值列表:

插入

更新

删除

默认的插入

例子:

SQLITE3_WRITER_MODE插入

工作台参数:作家模式

BEGIN_SQL {n}

有时,您必须在打开表之前执行一些SQL语句。例如,在尝试读取视图之前,可能需要确保视图存在。

在打开连接从数据库中读取数据时,读取器会查找指令< ReaderKeyword > _BEGIN_SQL {n}(n0, 1, 2,……),并在数据库连接上以SQL语句的形式执行每个此类指令的值。

属性指定的字符可以分隔多个SQL命令FME_SQL_DELIMITER指令,嵌入在SQL块的开始部分。这个指令后面的单个字符将用于将SQL块分割成SQL语句,然后将这些语句发送到数据库执行。注意:在字符前加一个空格。

例如:

FME_SQL_DELIMITER;删除从讲师;删除姓='Doe',名='John'的人

不允许有多个分隔符,在发送到数据库之前,分隔符字符将被剥离。

在执行这些SQL语句期间发生的任何错误通常都会以错误终止读取器或写入器(取决于SQL语句的执行位置)。如果指定的语句前面有连字符(" - "),则此类错误将被忽略。

必需的/可选

可选

工作台参数

开始SQL

END_SQL {n}

有时,您必须在读取一组表之后执行一些SQL语句。例如,在创建临时视图之后,可能需要清理它BEGIN_SQL

在关闭数据库上的连接之前,读取器会查找该指令< ReaderKeyword > _END_SQL {n}(n0, 1, 2,……),并在数据库连接上以SQL语句的形式执行每个此类指令的值。

属性指定的字符可以分隔多个SQL命令FME_SQL_DELIMITER指令,嵌入在SQL块的开始部分。这个指令后面的单个字符将用于将SQL块分割成SQL语句,然后将这些语句发送到数据库执行。注意:在字符前加一个空格。

例如:

FME_SQL_DELIMITER;删除从讲师;删除姓='Doe',名='John'的人

不允许有多个分隔符,在发送到数据库之前,分隔符字符将被剥离。

在执行这些SQL语句期间发生的任何错误通常都会以错误终止读取器或写入器(取决于SQL语句的执行位置)。如果指定的语句前面有连字符(" - "),则此类错误将被忽略。

必需的/可选

可选

工作台参数

最终的SQL

INIT_TABLES

要求/可选:可选

这个指令通知SQLite3编写器应该在什么时候初始化每个表。初始化包含删除或截断现有表以及根据需要创建新表的操作。

INIT_TABLES被设置为立即, SQLite3编写器将在解析DEF行并打开数据库文件。在这种模式下,所有表都将被初始化,即使SQLite3编写器没有接收到给定表的特性。

INIT_TABLES被设置为FIRSTFEATURE, SQLite3编写器只会在接收到要用于该表的第一个特性时初始化该表。在这种模式下,如果SQLite3编写器没有接收到给定表的任何特性,则永远不会初始化表。

工作台参数:初始化表