2011-11-16 8 views
28

Tenemos un script sql simple que debe ejecutarse contra una base de datos MySQL y queremos imprimir declaraciones de registro sobre el progreso del script (por ejemplo, Inserted 10 records into foo o Deleted 5 registros de la barra). Cómo hacemos esto?Cómo hacer eco de instrucciones de impresión al ejecutar un script sql

  1. Me gustaría saber la sintaxis que se utilizará para las instrucciones de inserción/actualización/eliminación.
  2. ¿Cómo sé sobre el número de filas afectadas por mis estados de cuenta?
  3. También me gustaría controlar su impresión utilizando un comando ECHO off o on en la parte superior del script.
  4. La secuencia de comandos debe ser portátil en el sistema operativo Windows/Linux.

Respuesta

32

Esto le dará a usted es simple impresión dentro de una secuencia de comandos SQL:

select 'This is a comment' AS ''; 

Alternativamente, esto agregará algunos datos dinámicos a su actualización de estado si se usa directamente después de un update, delete o insert comando:

select concat ("Updated ", row_count(), " rows") as ''; 
+0

¿Es la misma sintaxis para insertar, actualizar, eliminar comandos? – Joe

+0

He estado usando esto. Funciona bien. – cherouvim

+0

¿Qué debo hacer si tengo que capturar el número de filas afectadas de una determinada declaración de actualización/inserción/eliminación? – Joe

1

Usted puede utilizar -p de impresión - en el script para hacer este ejemplo:

#!/bin/ksh 
mysql -u username -ppassword -D dbname -ss -n -q |& 
print -p -- "select count(*) from some_table;" 
read -p get_row_count1 
print -p -- "select count(*) from some_other_table;" 
read -p get_row_count2 
print -p exit ; 
# 
echo $get_row_count1 
echo $get_row_count2 
# 
exit 
+3

Dudo que mucha gente tenga 'ksh' instalado. – Blender

+0

También debería mencionar que este script podría ejecutarse desde un entorno Windows o Linux. – Joe

5

sólo para hacer el script más fácil de leer, tal vez utilizar este proc:

DELIMITER ;; 

DROP PROCEDURE IF EXISTS printf; 
CREATE PROCEDURE printf(thetext TEXT) 
BEGIN 

    select thetext as ``; 

END; 

;; 

DELIMITER ; 

Ahora sólo puede hacer:

call printf('Counting products that have missing short description'); 
14

No sé si esto ayuda:

suponga que desea ejecutar un script sql (test.sql) desde la línea de comando:

mysql < test.sql 

y el contenido de test.sql es algo así como:

SELECT * FROM information_schema.SCHEMATA; 
\! echo "I like to party..."; 

La consola mostrará algo como:

CATALOG_NAME SCHEMA_NAME   DEFAULT_CHARACTER_SET_NAME  
     def information_schema  utf8 
     def mysql     utf8 
     def performance_schema  utf8 
     def sys     utf8 
I like to party... 

para que pueda ejecutar comandos de terminal dentro de una instrucción SQL sólo por el uso, proporcionar el script se ejecuta a través de una línea de comando.

\! #terminal_commands 
Cuestiones relacionadas