Передать значение параметра в файл sql из пакетного файла с помощью пакетной команды

У меня есть файл sql update_qde.sql, который содержит следующий код

UPDATE profile_const
set parameter_value = '04_2015'
where profile_name = 'MIDAS_MTH_ALL_Panels'
and parameter_name = 'PERIODS_TO';
commit;

quit;

У меня есть другой командный файл test.bat

Я хочу передать параметр_значение как переменную из пакетного файла с помощью пакетной команды.

Не могли бы вы показать мне какой-либо способ сделать это?


person Azizul Hassan Arif    schedule 15.06.2015    source источник
comment
это может вам помочь: Передача параметров в сценарий SQL с помощью пакетных файлов   -  person User Learning    schedule 15.06.2015
comment
Спасибо. Проверим и сообщим   -  person Azizul Hassan Arif    schedule 15.06.2015


Ответы (2)


Используйте переменные SQLCMD, поэтому измените test.bat так, чтобы он вызывал SQLCMD, а не ISQL.

@echo off
sqlcmd -E -S myserver -i update_qde.sql -v PARM1=2015-01-01

Измените SQL, чтобы использовать нотацию $()

UPDATE profile_const
SET parameter_value = '$(PARM1)'
WHERE profile_name = 'MIDAS_MTH_ALL_Panels'
AND parameter_name = 'PERIODS_TO';
COMMIT;
person greg    schedule 15.06.2015

Это довольно просто.

Создайте пакетный файл с приведенными ниже 3 строками кода. Чтобы создать пакетный файл, создайте новый файл .txt, сохраните приведенный ниже код внутри файла и переименуйте расширение этого файла с .txt на .bat.

Во второй строке ниже код value1 — это имя переменной, которая содержит значение, которое необходимо обновить. В третьей строке кода вы передадите это значение переменной в файл sql.

@echo off    
SET value1=04_2015    
sqlplus db_username/db_password@db_schema @sample.sql %value1%

Код для sample.sql приведен ниже. &&1 в приведенном ниже коде принимает параметр, который вы отправляете из пакетного файла, и он будет сохранен в переменной param1. Позже вы можете использовать эту переменную param1 внутри блока BEGIN для запроса UPDATE.

SET SERVEROUTPUT ON
SET DEFINE ON
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 200
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
SET term off 
SET verify off
set echo off
SPOOL "C:\Test\Logfile.log" append;

var param1 VARCHAR2(20);
BEGIN
:param1 := '&&1';   
END;
/

SET DEFINE OFF

BEGIN

    UPDATE profile_const
    set parameter_value = :param1
    where profile_name = 'MIDAS_MTH_ALL_Panels'
    and parameter_name = 'PERIODS_TO';
    commit;     

END;
/

quit;
/

SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF

Я проверил приведенный выше код, который отлично работает.

person Sarath KS    schedule 06.02.2018