Одним из способов экспорта данных из MATLAB ® и их вставки в базу данных является использование sqlwrite в командной строке. Однако при возникновении проблем с производительностью в этом процессе можно создать файл данных, содержащий каждую запись в наборе данных. Затем этот файл данных можно использовать в качестве входных данных функции массовой вставки базы данных для обработки большого набора данных. Кроме того, с помощью этого файла можно вставлять данные со специальными символами, такими как двойные кавычки. Массовая вставка обеспечивает повышение производительности за счет использования утилит массовой вставки, собственных для различных систем баз данных. Дополнительные сведения см. в разделе Работа с большими наборами данных.
В следующих примерах используются предварительно настроенные источники данных JDBC. Дополнительные сведения о настройке источника данных JDBC см. в разделе databaseConnectionOptions функция.
В этом примере используется файл данных, содержащий спортивные данные на локальном компьютере с установленным Oracle ® и экспортирующий данные в файл на сервер Oracle с использованием функции массовой вставки.
Подключение к настроенному источнику данных JDBC для базы данных Oracle.
datasource = "ORA_JDBC"; username = "user"; password = "password"; conn = database(datasource,username,password);
Создание таблицы с именем BULKTEST с использованием execute функция.
execute(conn,['CREATE TABLE BULKTEST (salary number, ' ... 'player varchar2(25), signed varchar2(25), ' ... 'team varchar2(25))'])
Создайте запись данных.
A = {100000.00,'KGreen','06/22/2011','Challengers'};
Расшириться A в набор данных, содержащий 10 000 записей.
A = A(ones(10000,1),:);
Запись данных в файл для функции массовой вставки.
Совет
При подключении к базе данных на удаленном компьютере необходимо записать этот файл на удаленный компьютер. Oracle испытывает трудности при чтении файлов, находящихся не на том же компьютере, что и база данных.
fid = fopen('c:\temp\tmp.txt','wt'); for i = 1:size(A,1) fprintf(fid,'%10.2f \t %s \t %s \t %s \n',A{i,1}, ... A{i,2},A{i,3},A{i,4}); end fclose(fid);
Задайте расположение папки с помощью execute функция.
execute(conn, ... 'CREATE OR REPLACE DIRECTORY ext AS ''C:\\Temp''')
Удалите временную таблицу, если она существует, с помощью execute функция.
execute(conn,'DROP TABLE testinsert')
Создание временной таблицы и использование функции массовой вставки для ее вставки в таблицу BULKTEST.
execute(conn,['CREATE TABLE testinsert (salary number, ' ... 'player varchar2(25), signed varchar2(25), ' ... 'team varchar2(25)) ORGANIZATION EXTERNAL ' ... '( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext ACCESS ' ... 'PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS ' ... 'TERMINATED BY ''\t'') LOCATION (''tmp.txt'')) ' ... 'REJECT LIMIT 10000']) execute(conn,'INSERT INTO BULKTEST SELECT * FROM testinsert')
Подтвердите количество переменных в BULKTEST.
results = fetch(conn,'SELECT * FROM BULKTEST');
results.Properties.VariableNamesans =
1×4 cell array
{'SALARY'} {'PLAYER'} {'SIGNED'} {'TEAM'}
Закройте подключение к базе данных.
close(conn)
В этом примере используется файл данных, содержащий спортивные данные на локальном компьютере с установленным Microsoft ® SQL Server ® и экспортирующий данные в файл в Microsoft SQL Server с помощью функции массовой вставки.
Подключение к настроенному источнику данных JDBC для базы данных Microsoft SQL Server.
datasource = "MSSQLServer_JDBC"; username = "user"; password = "password"; conn = database(datasource,username,password);
Создание таблицы с именем BULKTEST с использованием execute функция.
execute(conn,['CREATE TABLE BULKTEST (salary ' ... 'decimal(10,2), player varchar(25), signed_date ' ... 'datetime, team varchar(25))'])
Создайте запись данных.
A = {100000.00,'KGreen','06/22/2011','Challengers'};
Расшириться A в набор данных, содержащий 10 000 записей.
A = A(ones(10000,1),:);
Запись данных в файл для функции массовой вставки.
Совет
При подключении к базе данных на удаленном компьютере необходимо записать этот файл на удаленный компьютер. Microsoft SQL Server испытывает трудности при чтении файлов, находящихся не на том же компьютере, что и база данных.
fid = fopen('c:\temp\tmp.txt','wt'); for i = 1:size(A,1) fprintf(fid,'%10.2f \t %s \t %s \t %s \n',A{i,1}, ... A{i,2},A{i,3},A{i,4}); end fclose(fid);
Запустите функцию массовой вставки с помощью execute функция.
execute(conn,['BULK INSERT BULKTEST FROM ' ... '''c:\temp\tmp.txt'' WITH (FIELDTERMINATOR = ''\t'', ' ... 'ROWTERMINATOR = ''\n'')'])
Подтвердите количество переменных в BULKTEST.
results = fetch(conn,'SELECT * FROM BULKTEST');
results.Properties.VariableNamesans =
1×4 cell array
{'SALARY'} {'PLAYER'} {'SIGNED_DATE'} {'TEAM'}
Закройте подключение к базе данных.
close(conn)
В этом примере используется файл данных, содержащий спортивные данные на локальном компьютере с установленным MySQL ® и экспортирующий данные в файл в базу данных MySQL с использованием функции массовой вставки.
Подключение к настроенному источнику данных JDBC для базы данных MySQL.
datasource = "MySQL_JDBC"; username = "user"; password = "password"; conn = database(datasource,username,password);
Создание таблицы с именем BULKTEST с использованием execute функция.
execute(conn,['CREATE TABLE BULKTEST (salary decimal, ' ... 'player varchar(25), signed_date varchar(25), ' ... 'team varchar(25))'])
Создайте запись данных.
A = {100000.00,'KGreen','06/22/2011','Challengers'};
Расшириться A в набор данных, содержащий 10 000 записей.
A = A(ones(10000,1),:);
Запись данных в файл для функции массовой вставки.
Примечание
MySQL считывает файлы, сохраненные локально, даже если вы подключаетесь к удаленному компьютеру. Поэтому файл можно записать на локальный или удаленный компьютер.
fid = fopen('c:\temp\tmp.txt','wt'); for i = 1:size(A,1) fprintf(fid,'%10.2f \t %s \t %s \t %s \n', ... A{i,1},A{i,2},A{i,3},A{i,4}); end fclose(fid);
Запустите функцию массовой вставки. Инструкция SQL использует инструкцию LOCAL INFILE для обработки ошибок. Для получения подробной информации об этом заявлении см. документацию по базе данных MySQL.
execute(conn,['LOAD DATA LOCAL INFILE ' ... ' ''C:\\temp\\tmp.txt'' INTO TABLE BULKTEST ' ... 'FIELDS TERMINATED BY ''\t'' LINES TERMINATED ' ... 'BY ''\n'''])
Подтвердите количество переменных в BULKTEST.
results = fetch(conn,'SELECT * FROM BULKTEST');
results.Properties.VariableNamesans =
1×4 cell array
{'SALARY'} {'PLAYER'} {'SIGNED_DATE'} {'TEAM'}
Закройте подключение к базе данных.
close(conn)
close | database | execute | fetch