Предайте стойността на параметъра към 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

Искам да предам parameter_value като променлива от партиден файл с помощта на пакетна команда.

Бихте ли ми показали някакъв начин да направя това?


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