パラメータ渡し

(8.0.26)
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11176009486

drop table tab1;
create table tab1(col1 int, col2 varchar(1));
insert into tab1 values(1,'A');
insert into tab1 values(2,'B');
insert into tab1 values(3,'C');
select * from tab1;

vim a1.sql
select * from tab1 where col1 = @col1 and col2 = '@col2';

vim a2.sql
select * from tab1 where col1 = @col1 and col2 = @col2;

vim b.sql
select * from @tab1;


mysql test -e "set @col1=1; set @col2=A; source a1.sql;"
→エラー

mysql test -e "set @col1=1; set @col2=A; source a2.sql;"
→エラー

mysql test -e "set @col1=1; set @col2='A'; source a1.sql;"
→ヒットしない

mysql test -e "set @col1=1; set @col2='A'; source a2.sql;"
→OK

※文字列のクォートはパラメータ側に指定する必要あり

mysql test -e "set @tab1=tab1; source b.sql;"
→エラー

mysql test -e "set @tab1='tab1'; source b.sql;"
→エラー


※テーブル名をパラメータ指定はできない

(19c)
https://www.shift-the-oracle.com/sqlplus/tutorial/sqlplus-script-parameter.html


drop table tab1 purge;
create table tab1(col1 int, col2 varchar2(1));
insert into tab1 values(1,'A');
insert into tab1 values(2,'B');
insert into tab1 values(3,'C');
commit;
select * from tab1;

vim a1.sql
select * from tab1 where col1 = &1 and col2 = '&2';
exit

vim a2.sql
select * from tab1 where col1 = &1 and col2 = &2;
exit

vim b.sql
select * from &1;
exit

sqlplus test/test@pdb1 @a1.sql "1" "A"
→OK

sqlplus test/test@pdb1 @a2.sql "1" "A"
→エラー

sqlplus test/test@pdb1 @a1.sql "1" "'A'"
→OK

sqlplus test/test@pdb1 @a2.sql "1" "'A'"
→エラー

※文字列のクォートはSQLファイル側に指定する必要あり

sqlplus test/test@pdb1 @b.sql "tab1"
→OK

sqlplus test/test@pdb1 @b.sql "'tab1'"
→OK


※テーブル名をパラメータ指定も可能

 

(14)
https://dk521123.hatenablog.com/entry/2021/08/01/000000


drop table tab1;
create table tab1(col1 int, col2 varchar(1));
insert into tab1 values(1,'A');
insert into tab1 values(2,'B');
insert into tab1 values(3,'C');
select * from tab1;

vim a1.sql
select * from tab1 where col1 = :col1 and col2 = ':col2';

vim a2.sql
select * from tab1 where col1 = :col1 and col2 = :col2;

vim b.sql
select * from :tab1;


psql test -v col1="1" -v col2="A" -f a1.sql
→ヒットしない

psql test -v col1="1" -v col2="A" -f a2.sql
→エラー

psql test -v col1="1" -v col2="'A'" -f a1.sql
→ヒットしない

psql test -v col1="1" -v col2="'A'" -f a2.sql
→OK

※文字列のクォートはパラメータ側に指定する必要あり

psql test -v tab1="tab1" -f b.sql
→OK

psql test -v tab1="'tab1'" -f b.sql
→エラー

※テーブル名をパラメータ指定も可能

 

(2019)
https://docs.microsoft.com/ja-jp/sql/ssms/scripting/sqlcmd-use-with-scripting-variables?view=sql-server-ver15


drop table tab1;
create table tab1(col1 int, col2 varchar(1));
insert into tab1 values(1,'A');
insert into tab1 values(2,'B');
insert into tab1 values(3,'C');
select * from tab1;

notepad a1.sql
select * from tab1 where col1 = $(col1) and col2 = '$(col2)';

notepad a2.sql
select * from tab1 where col1 = $(col1) and col2 = $(col2);

notepad b.sql
select * from $(tab1);

 

sqlcmd -d test -v col1="1" -v col2="A" -i a1.sql
→OK

sqlcmd -d test -v col1="1" -v col2="A" -i a2.sql
→エラー


sqlcmd -d test -v col1="1" -v col2="'A'" -i a1.sql
→エラー

sqlcmd -d test -v col1="1" -v col2="'A'" -i a2.sql
→OK

※文字列のクォート指定はパラメータ側とSQLファイル側のどちらでもよい

sqlcmd -d test -v tab1="tab1" -i b.sql
→OK

sqlcmd -d test -v tab1="'tab1'" -i b.sql
→エラー

※テーブル名をパラメータ指定も可能