2017-11-21 36 views
0

多くの変数を受け入れ、入力に基づいて結果テーブルを出力する、使いやすいストアドプロシージャをTeradataで作成しようとしています。 SQLアシスタント(プロバイダバージョン14.0.0.0)でクエリを構築しています。たとえば...Teradataの動的SQL条件付きストアドプロシージャ

Callステートメント...

CALL spAddressLookup 
('?AcctNum', '?LastName', '?FirstName' 
    ,'?Address' , '?City', '?State', '?ZipCode' 
    ,'?Company', '?Email', '?Balance', ReturnCode) ; 

文を作成...

CREATE PROCEDURE spAddressLookup(IN pAcctNum VARCHAR(25) 
,IN pLastName VARCHAR(100), IN pFirstName VARCHAR(100), IN pAddress VARCHAR(255) 
,IN pCity VARCHAR(255), IN pState VARCHAR(100), IN pZipCode VARCHAR(15) 
,IN pCompany VARCHAR(255), IN pEmail VARCHAR(255), IN pBalance VARCHAR(10) , OUT ReturnCode CHAR(5)) 
BEGIN 

私は動的にのみれるこれらの変数を含んでWHERE句を構築したいと思いますユーザーは値を入力します。私はIF私のproc内の条件文を使用しようとしましたが、SET文はIFの中でうまく動作していないようです。

これは私がしようとしているものです...

IF TRIM(pLastName) IS NOT NULL 
THEN 
    SET strWHERE = ' AND (a.LastName LIKE ''%' || pAcctNum || '%'')' 
END IF; 

任意のアイデアは?

あなたはこの方法でそれを行うことができます
+0

あなたは 'がIF.'内でもプレーしていないようです何を意味任意のエラー?またはif文を入力しませんでしたか?あなたはあなたのコードがどこに行くのか知るためにいくつかのデバッグ行を入れましたか? –

+2

これを既存の 'strWHERE'に追加しますか?次に、このようにコード化する必要があります。 'SET strWHERE = strWHERE || 'AND(a.LastName LIKE' '%' || pAcctNum || '%' ')' – dnoeth

+0

@dnoethは 'SET strWHERE = 'WHERE 1 = 1''を初期化するので、すべてのANDを連結することができます。 .. .. –

答えて

0

の内側

IF pLastName IS NOT NULL 
    SET strWHERE = ' AND (a.LastName LIKE ''%' TRIM(pAcctNum) '%'')' 
END IF 

あなたは、MSSQLにTHEN必要ともパイプはありません。まず、このようなすべての入力パラメータの変数を作成します。

SET lv_pAcctNum = CASE WHEN 'All' IN (''||pAcctNum ||'') THEN 1 ELSE (''||pAcctNum ||'') END; 

をここにAll'signifiesにユーザーが何も入っていないのentiresを(それはあなたの手順の設計どおりにもnullにすることができます)。

という句は、次のように変数を使用して、動的SQLの後:

'WHERE CASE WHEN ''All'' IN ('''||pAcctNum||''') THEN 1 ELSE Route_to_Market END IN ('''||lv_pAcctNum||''')' 

これは、あなたの目標を達成する

0

:あなたは一つのことを行うことができますLIKE

+0

これはMSSQLではないTeradataの質問です – ChrisCamp