2016-04-26 15 views
2

LIBNAMEステートメントを使用してTeradataへの接続を確立するSAS暗黙的なSQLでTeradata UDF(ユーザー定義関数)を使用しようとしています。この関数はPTY_DECRYPTと呼ばれています。 TeradataのTESTというデータベースで定義されています。この機能の目的は、Teradataのビューの列の値を復号化することです。SAS暗黙のSqlパスでTeradata UDFを使用する

明示的なSql.BelowでUDFを使用すると、データベースに存在するV_TEST_PERSという名前のビューでSSN_NBRという名前の列にこの関数を使用しています。

Explcit SQL:

Options debug=DBMS_TIMERS sastrace=',,,d' 
sastraceloc=saslog no$stsuffix fullstimer; 


Proc Sql; 
Connect to TERADATA(User=XXXXX pwd=XXXXX server=XXXXX); 
Create Table Final as 
select * from connection to teradata 
(
Select 
sub_id, 
SSN_NBR, 
TEST.PTY_DECRYPT(SSN_NBR,'T_ssn_test',400,0,0) as SSN_NBR_Decrypt 
from SAMPLE.V_TEST_PERS 
); 
disconnect from teradata; 
Quit; 

しかし、私は暗黙SQLで同じ機能を使用したいが、それは動作しません。 Implicit SQLの最小限の変更で暗黙的なSQLでそれを動作させる方法に関するアイデアはありますか?あなたはUDFを参照する場合しかし、あなたはLIBNAMEの別名でUDFを含むTESTデータベースエイリアシングされていない、LIBNAMEエイリアスTDとビューを参照するあなたの暗黙のSQLで

暗黙のSql

Options debug=DBMS_TIMERS sastrace=',,,d' 
sastraceloc=saslog no$stsuffix fullstimer; 

Libname Td Teradata User=XXXXX pwd=XXXXX server=XXXXX database=SAMPLE ; 

Proc sql; 
Create table Final as 
select 
sub_id, 
SSN_NBR, 
TEST.PTY_DECRYPT(SSN_NBR,'T_ssn_test',400,0,0) as SSN_NBR_Decrypt 

from Td.V_TEST_PERS; 
Quit; 

答えて

1

私はSASコミュニティフォーラムで同じ質問をしましたが、私はこの問題に対する解決策を見つけたと言いうことをうれしく思います。

下のリンクをご覧ください。

https://communities.sas.com/t5/Base-SAS-Programming/Using-a-Teradata-UDF-in-SAS-Implicit-Sql-Pass-Thru/m-p/266850/highlight/false#M52685

+0

興味深い回避策を。賢いそれを動作させるために 'ORDER BY 1 'を使用することに驚いた。 –

1

。構文上、SASではこれを実行できない場合があります。 (例えばTD.TEST.PTY_DECRYPT() - 実際に、私は仕事にこれを期待していない)

それは完全にすることなく、UDFを見つけるために、データベース・オプティマイザのデフォルトの検索パスになるように、UDFがSYSLIBまたはTD_SYSFNLIBに配置する必要があるかもしれません修飾された(例:TD_WEEK_BEGIN())また、UDFをデータベースSAMPLEに配置することもできますが、環境内でUDFを維持する方法に違反する可能性があります。

それ以外の場合は、データベースのビューにUDF呼び出しを埋め込むことができますが、暗号化されたデータを含むビューに対して列レベルでセキュリティを許可していない環境では、要素。 (例:PHI、PIIなど)ビューで復号化している列を表示するユーザーの機能を動的にフィルタリングする行列レベルのセキュリティー機構がないと、UDFをビューに配置することはできません。

関連する問題