2016-07-20 43 views
0

テーブルを更新するSAP HANA手順があります。私は、動的SQLクエリを作成しようとしている、これは私の例です:SAP HANA手順のパラメータを使用した動的更新クエリ

declare _field varchar(100) := 'NAME'; 
declare _name varchar(100) := 'david'; 
declare _id integer := 1; 
DECLARE SQL_STR VARCHAR(3000); 

SQL_STR := 'UPDATE "_SYS_BIC"."TEST_TABLE" SET "'||_field||'" = '||_name||' WHERE "ID" = '||:_id; 

EXECUTE IMMEDIATE (:SQL_STR); 

しかしコンソールで、私はこのエラーを持っている:

私はそれを修正するにはどうすればよい

Service exception: [260] invalid column name

答えて

1

私は右の構文に名前を付ける列またはテーブルを設定する必要がある場合

declare _id integer := 1; 
declare _name varchar(100) := 'david'; 
declare _field varchar(100) := 'NAME'; 
DECLARE SQL_STR VARCHAR(3000); 

SQL_STR := 'UPDATE "_SYS_BIC"."TEST_TABLE" SET "'||_field||'" = '''||_name||''' WHERE "ID" = '||_id; 
EXECUTE IMMEDIATE (:SQL_STR); 

は、文字列値に構文を設定するには "'||_field||'"

でそれを修正するための正しい構文は'''||_name||'''最初に見つかりました2つのアポストロフィがエスケープに使用されるので、値が文字列であると問合せできます。最後の1つのアポストロフィを使用して残りの問合せ文字列に連結します。 3つのアポストロフィーはスペースを入れずに書かなければなりません。

+1

構文エラーを修正しましたが、ここで取り組んでいるアプローチは実際には "柔軟性がなく"、他の言語で作業していたプログラマーによって書かれたSQLコードでよく見られます。 このアプローチの多くの短所の中には、コードがあなたのデータモデルへの「見えない」依存性を持っていて、コンパイル時にステートメントをチェックすることができず、SQLインジェクションの大きな変更があります。 .. 代わりに、データベースの特定のエンティティで動作する特定のプロシージャをビルドします。 –

+0

私はこのアプローチの大きな問題について知っていますが、多くの理由から、この場合、私はこの方法を選択する必要があります。助けてくれてありがとう! – Shiroga

関連する問題