2017-05-30 7 views
0

私は自分のSAS作業用のlibrefにあるテーブルとOracleから抽出したテーブルから左結合を試みていますが、エラーメッセージが表示されます。ここで 左結合 - SASとオラクル

は私のコードです:

PROC SQL; 
connect to oracle(user=&usuario pass=&pass_dwhprd path='@dtm'); 
create table base_rateio1 (compress=yes reuse=yes) as 
select B.* from connection to oracle 
(select 
     A.*, 
     substr(B.exem_cod_sog_scv,3,4) projeto 

    from  work.BASE_KPI3_2  A 
    left join [email protected] B 

where exem_cod_cia >= 1 
    and exem_cod_idt_fil >= 1 
    and A.apolice = B.exem_apo_num 
    and A.contrato = B.exem_ctrs_cod 
    and A.filial = B.exem_cod_idt_fil 
    and A.cod_cia = B.exem_cod_cia 
    and B.exem_ems_cod = 1 
) 
as t1; 
disconnect from oracle; 
quit; 

そして、ここでエラーメッセージです:

ERROR: ORACLE prepare error: ORA-00905: missing keyword. SQL statement: select A.*, substr(B.exem_cod_sog_scv,3,4) projeto from 
     work.BASE_KPI3_2 A, left join [email protected] B where exem_cod_cia >= 1 and exem_cod_idt_fil >= 1 and A.apolice = 
     B.exem_apo_num and A.contrato = B.exem_ctrs_cod and A.filial = B.exem_cod_idt_fil and A.cod_cia = B.exem_cod_cia and 
     exem_ems_cod = 1. 

は、私は本当に

+0

connect文でSASワークテーブルを使用することはできません。暗黙的にパススルーするか、SASテーブルをOracleに移動してからconnectステートメントを使用する必要があります。 – Kiran

+0

@Kiranそれ以外の方法はありませんか? SASテーブルをOracleに移行するためのアクセス権や権限はありません。だからこそ私はこの左の結合を試みている。 – Rods2292

+0

あなたは暗黙のパススルーをしませんでした。下の答えの3番目のステップを参照してください。 – Kiran

答えて

2

connect文は、Oracleですべてを行い、問題が何であるかを知りません。したがって、あなたのクエリはconnect文の中では動作しません。あなたには2つの選択肢があります。次の2つのステップ

proc sql; 
create table oratable.tablename as 
select * 
from sastable.tablename; 
quit; 

に示すように、OracleへのSASテーブルを移動してから行うのどちらかは、その後、以上のことができない場合は、のような何かをしなければならないクエリで

proc sql; 
    connect to oracle (user=&myid orapw=&mypwd path="&mydb"); 
    execute (use your logic here) by oracle; 
    disconnect from oracle; 
    quit; 

を上記の表を使用して参加しますこの。

libname oratable oracle user=user password=password path=path; 

proc sql; 
    create table oratable.tablename as 
    select * 
    from sastable.tablename left join oratable.tablename 
    on yourcolumns 
    quit; 
+0

明示的にここに' libname'構文を明示的に記述して表示したい場合があります。 – Joe

+0

Joeはあなたの提案に応じてlibname構文も追加しました – Kiran

1

あなたはそのため2つのテーブル間の関係を確立するために、ON述語を使用する必要があり、あなたのLEFT JOIN句を述べるためにANSI命名法を使用している、何かのように:私は知りません

select B.* from connection to oracle 
(select 
     A.*, 
     substr(B.exem_cod_sog_scv,3,4) projeto 

    from  work.BASE_KPI3_2  A 
    left join [email protected] B ON A.apolice = B.exem_apo_num 
            and A.contrato = B.exem_ctrs_cod 
            and A.filial = B.exem_cod_idt_fil 
            and A.cod_cia = B.exem_cod_cia 
            and B.exem_ems_cod = 1 

where exem_cod_cia >= 1 
    and exem_cod_idt_fil >= 1 
) 

'exem_cod_cia'と 'exem_cod_idt_fil'フィールドがあるので、Bに入っていれば 'ON'述語にも入ることができます。そうでなければ、そこに残すことができます。