Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Divida várias instruções SQL em instruções SQL individuais


Não tenho certeza se isso é possível. Você certamente precisaria de um conhecimento profundo da sintaxe SQL do seu DBMS de destino. Por exemplo, em cima da minha cabeça, esta é uma única instrução MySQL:
INSERT INTO things
SELECT * FROM otherthings ON DUPLICATE KEY
UPDATE thingness=thingness+1

É provável que existam construções em alguns SGBDs que, sem um delimitador, podem ser ambíguas.

Acho que você pode ser forçado. É totalmente a maneira padrão de delimitar instruções SQL. Mesmo que você possa encontrar uma heurística para detectar pontos de provável início de instrução SQL, você corre o risco de desastres como uma cláusula "DELETE FROM things" acidental sem WHERE.

A dupla nova-linha-para-nova-instrução seria aceitável?

Não, mesmo com delimitadores de ponto e vírgula, regex não é nem de longe poderoso o suficiente para analisar SQL. Os pontos de problema incluiriam:
';'
";"
`;`
'\';'
''';'
-- ;
#;
/*;*/

e qualquer interposição dessas estruturas. Eca!