从外部文件或键盘将数据导入数据库表中。
input into [ owner.]table-name
[ from filename | prompt]
[ format input-format ]
[ escape character character ]
[ escapes { on | off }
[ by order | by name ]
[ delimited by string ]
[ column widths (integer , . . . ) ]
[ nostrip ]
[ ( column-name, . . . ) ]
[ encoding encoding ]
input-format :
ascii | dbase | dbasell| dbaselll
| excel | fixed | foxpro | lotus
encoding : identifier or string
from 子句 – 以带引号的字符串形式传递到服务器的文件名。因此,该字符串遵循的格式要求与其它 SQL 字符串相同。特别是:
要指定目录路径,必须用两个反斜杠表示反斜杠字符 (\)。要将数据从 c: emp\input.dat 文件装载到 employee 表中:
input into employee from ‘c: \temp\input.dat’
路径名相对于运行 Interactive SQL 的计算机。
prompt – 允许用户为一行中的每一列输入值。在窗口模式下运行时,将会显示一个对话框,用户可以在其中为新行输入值。如果用户在命令行中运行 Interactive SQL,Interactive SQL 将提示用户在命令行中输入每一列的值。
format – 每组值必须是 format 子句指定的格式;如果未指定 format 子句,则必须是 set option input_format 语句指定的格式。用户输入命令后,会显示一个对话框,供用户以输入格式在每行输入一个数据行。
某些文件格式包含有关列名和列类型的信息。
使用此信息,input 语句会在数据库表尚不存在时进行创建。这是一种非常简单的将数据装载到数据库中的方法。以下格式包含创建表所需的足够信息:dbasell、dbaselll、foxpro 和 lotus。
从命令文件输入的操作由包含 end 的行终止。从文件输入的操作在文件末尾被终止。
允许的 input 格式包括:
ascii – 假定输入行是 ASCII 字符,每个输入行占一行,值用逗号分隔。字母字符串可以用撇号(单引号)引起来,也可以用引号(双引号)引起来。包含逗号的字符串必须用单引号或双引号引起来。如果字符串本身包含单引号或双引号,则应使用双重引号字符,才能在字符串中使用该字符。也可以选择使用 delimited by 子句指定其它分隔字符串,而不是使用缺省分隔符(逗号)。
系统还会识别其它三种特殊序列。两个字符表示一个换行符,“\”表示单个 \,序列 \xDD 表示具有十六进制代码 DD 的字符。
dbase – 文件为 DBASEll 或 DBASElll 格式。Interactive SQL 将尝试根据文件中的信息来确定是哪种格式。如果表不存在,则创建表。
dbasell – 文件为 DBASEll 格式。如果表不存在,则创建表。
dbaselll – 文件格式为 DBASElll。如果表不存在,则创建表。
excel – 输入文件格式为 Microsoft Excel 2.1。如果表不存在,则创建表。
fixed – 输入行使用固定格式。请使用 column widths 子句指定列宽。如果不指定列宽,则文件中的列宽必须与相应数据库列类型的任何值所要求的最大字符数相同。
不能将 fixed 格式用于包含嵌入式换行符和文件尾字符序列的二进制列。
foxpro – 文件为 FoxPro 格式。如果表不存在,则创建表。
lotus – 文件为 Lotus WKS 格式工作表。input 假定 Lotus WKS 格式工作表中的第一行为列名。如果表不存在,则创建表。在这种情况下,由于文件中的信息适用于单元格而不是列,因此所创建的列类型和列大小可能不正确。
escape character – 十六进制代码和符号的缺省转义字符是反斜杠 (\),例如,\x0A 表示换行符。
可以使用 escape character 子句更改转义字符。例如,要将感叹号用作转义字符,请输入:
... escape character ‘|’
只能将一个单字节字符用作转义字符。
escapes – 启用 escapes(缺省设置)后,数据库服务器将反斜杠字符后面的字符识别并解释为特殊字符。换行符可以作为组合 \n 包含在数据中,其它字符可以作为十六进制 ASCII 代码包含在数据中,例如使用 \x09 表示制表符。连续两个反斜杠字符 (\) 解释为一个反斜杠。反斜杠后跟除 n、x、X 或 \ 外的其它任何字符都解释为两个单独的字符。例如,\q 将插入一个反斜杠和字母 q。
by – 允许用户指定输入文件中的列是基于它们在列表中的序号位置(order,缺省值),还是按它们的列名 (name) 与表列进行匹配。并非所有输入格式都在文件中包含列名信息。name 只能用于具有列名的输入格式。以下格式同样允许自动创建表:dbasell、dbaselll、foxpro 和 lotus。
delimited – 用于指定要用作 ASCII 输入格式中的分隔符的字符串。
column widths – 只能为 fixed 格式指定;它指定输入文件中的列宽度。如果未指定 column widths,则宽度由数据库列类型确定。如果在 fixed 格式中插入 long varchar 或 binary 数据,请不要使用此子句。
nostrip – 通常,对于 ASCII 输入格式,在插入值之前会从不带引号的字符串中去除尾随空白。nostrip 可用于禁止去除尾随空白。无论是否使用该选项,都不会从带引号的字符串中去除尾随空白。而无论是否使用 nostrip 选项设置,都会从不带引号的字符串中去除前导空白。
如果 ASCII 文件包含列显示为空值的条目,则将其视为 NULL。如果该位置的列不能为 NULL,则会在数值列中插入零,在字符列中插入空字符串。
encoding – 允许指定用于读取文件的编码。encoding 只能用于 ASCII 格式。
如果未指定 encoding,Interactive SQL 将按如下方式确定用于读取文件的代码页,列表中位置靠前的代码页值优先于位置靠后的值:
使用 default_isql_encoding 选项指定的代码页(如果设置此选项)
启动 Interactive SQL 时使用 -codepage 选项指定的代码页
运行 Interactive SQL 的计算机的缺省代码页
这是 ASCII 文本文件中的 input 语句示例:
input into employee from new_emp.inp format ASCII
input 语句允许在指定数据库表中进行高效的批量插入。可通过输入窗口读取用户提供的输入行(如果指定 prompt),也可以从文件中读取输入行(如果指定 from file_name)。如果两者均未指定,则从包含 input 语句的命令文件中读取。在 Interactive SQL 中,甚至可以直接从“SQL 语句”窗格中读取输入。在这种情况下,输入以只包含字符串 end 的行结束。
如果为任何输入格式指定了列列表,则数据将插入到指定表的指定列中。缺省情况下,input 语句假定输入文件中的列值显示顺序与它们在数据库表定义中显示的顺序相同。如果输入文件的列顺序不同,则必须在 input 语句的末尾列出输入文件的实际列顺序。
例如,如果使用以下命令创建表:
create table inventory ( quantity int, item varchar(60) )
并且要从在数量值前面包含名称值的输入文件 stock.txt 中导入 ASCII 数据,
‘Shirts’, 100 Shorts’, 60
则必须在 input 语句末尾列出输入文件的实际列顺序才能正确插入数据:
input into inventory from stock.txt FORMAT ASCII (item, quantity)
缺省情况下,在尝试插入导致错误的行时,input 将会停止。通过设置 on_error 和 conversion_error 选项,可以按不同的方式处理错误(请参见“set option”)。如果在 input 上截断任何字符串值,则 Interactive SQL 会在“消息”窗格中输出警告。NOT NULL 列中缺少的值将被设置为零(对于数值型列)或者设置为空字符串(对于非数值型列)。如果 input 尝试插入 NULL 行,则输入文件包含空行。
必须具有表或视图的 insert 权限。
无。