2011-11-16 6 views
28

У нас есть простой скрипт sql, который нужно выполнить для базы данных MySQL, и мы хотели бы, чтобы инструкции журнала печати выполняли ход сценария (например, ввели 10 записей в foo или Deleted 5 записей из бара). как нам это сделать?Как выполнять команды эхо-печати во время выполнения sql-скрипта

  1. Я хотел бы знать синтаксис, который будет использоваться для операторов insert/update/delete.
  2. Как узнать количество строк, на которые повлияли мои операторы.
  3. Я также хотел бы управлять печатью их с помощью команды ECHO off или on в верхней части скрипта.
  4. Сценарий должен быть переносимым в ОС Windows/Linux.

ответ

32

Это даст вам простой печати в SQL скрипт:

select 'This is a comment' AS ''; 

В качестве альтернативы, это добавит некоторые динамические данные в ваше обновление статуса, если они используются непосредственно после update, delete или insert:

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

Является ли синтаксис одинаковым для вставки, обновления, удаления команд? – Joe

+0

Я использую это. Он работает нормально. – cherouvim

+0

Что делать, если мне нужно зафиксировать количество строк, связанных с определенным оператором update/insert/delete. – Joe

1

Вы можете использовать печать -p - в сценарии, чтобы сделать этот пример:

#!/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

Уверен, что у многих людей установлен 'ksh'. – Blender

+0

Следует также упомянуть, что этот скрипт можно запустить из среды Windows или Linux. – Joe

5

Просто, чтобы сделать сценарий более удобным для чтения, может использовать этот процедурный:

DELIMITER ;; 

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

    select thetext as ``; 

END; 

;; 

DELIMITER ; 

Теперь вы можете просто сделать:

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

Я не знаю, если это помогает:

Предположим, вы хотите запустить sql-скрипт (test.sql) из командной строки:

mysql < test.sql 

и содержание Test.sql что-то вроде:

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

консоли будет показывать что-то вроде:

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... 

так что вы можете выполнить терминальные команды внутри SQL заявления, используя только обеспечивает сценарий запускается через командную строку.

\! #terminal_commands 
Смежные вопросы