psqlでパラメータを使用する際に問題があります。 where句でパラメータを正しく使用する方法。 下記の手順をコンパイルする際にエラーはありません。 「bla bla bla」の文字列を渡すと結果はありません。PSQLでパラメータを使用する
CREATE PROCEDURE SELECTCATALOGUE (
TXT VARCHAR(30))
RETURNS (
CODE VARCHAR(9),
NAME VARCHAR(50))
AS
BEGIN
for execute statement
'select code,name
from catalogue
where name='||:TXT
into :CODE,:NAME
do
suspend;
END
しかし、私は、例えば、パラメータを置き換えることで、この手順を実行すると:私は適切な結果を得ている
CREATE PROCEDURE SELECTCATALOGUE (
TXT VARCHAR(30))
RETURNS (
CODE VARCHAR(9),
NAME VARCHAR(50))
AS
BEGIN
for execute statement
'select code,name
from catalogue
where name=''bla bla bla'''
into :CODE,:NAME
do
suspend;
END
。私は何かを逃している、それを動作させる方法は?
編集: ここでもう1つのことがあります。この手順:
CREATE PROCEDURE SELECTCATALOGUE
RETURNS (
CODE VARCHAR(9),
NAME VARCHAR(50))
AS
declare variable stmt varchar(1000);
declare variable paramTXT varchar(100);
declare variable paramTXT1 varchar(100);
declare variable T varchar(1000);
BEGIN
paramTXT='PLO'||'%';
paramTXT1='REM'||'%';
T='paramTXT,paramTXT1';
stmt='select code,name
from catalogue
where name like ? or name like ? order by name';
for execute statement (
stmt
)
(paramTXT,paramTXT1)
into :CODE,:NAME
do
suspend;
END
正しい結果が返されます。代わりに "(paramTXT、paramTXT1)"という文字列を "T"文字列に使用する方法がありますか?結果が得られますか?あなたがそこに文字列bla bla bla
の前後に引用符ではありませんので、エンジンは通常、列名として扱いとすべきであることがわかり
select code,name from catalogue where name=bla bla bla
:
あなたの最初のバージョンで
私は質問を編集しました(上記の例)、時には1つのパラメータだけではないので、パラメータとして渡す文字列のようなものを使うのが良いかもしれないと思った。出来ますか? –
パラメータ化された文を使用していません。最初の例のようにステートメントに連結することができますが、:TXTの前後に引用符を追加することに注意してください。しかし、これは安全ではなく、パラメータ化されたステートメントを使用する方が良いです。 – ain