Один способ экспортировать данные из MATLAB® и вставить его в вашу базу данных состоит в том, чтобы использовать sqlwrite
функция в командной строке. Однако, если вы испытываете проблемы эффективности с этим процессом, можно вместо этого создать файл данных, содержащий каждую запись в наборе данных. Затем можно использовать этот файл данных в качестве входа в объемную функциональность вставки базы данных, чтобы обработать большой набор данных. Кроме того, с этим файлом можно вставить данные со специальными символами, такими как двойные кавычки. Объемная вставка обеспечивает увеличение производительности при помощи объемных утилит вставки, которые являются нативными к различным системам баз данных. Для получения дополнительной информации смотрите Работу с Большими наборами данных.
Следующее использование в качестве примера предварительно сконфигурировало источники данных JDBC. Для получения дополнительной информации о конфигурировании источника данных JDBC, смотрите configureJDBCDataSource
функция.
Этот пример использует файл данных, содержащий спортивные данные по локальной машине с установленным 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.VariableNames
ans = 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.VariableNames
ans = 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.VariableNames
ans = 1×4 cell array {'SALARY'} {'PLAYER'} {'SIGNED_DATE'} {'TEAM'}
Закройте соединение с базой данных.
close(conn)
close
| database
| execute
| fetch