59%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks
62%let lib=%upcase(&lib);
64%let engine=%mf_getengine(&lib);
65%let schema=%mf_getschema(&lib);
67%let ds1=%mf_getuniquename(prefix=getpk_ds1);
68%let ds2=%mf_getuniquename(prefix=getpk_ds2);
69%let ds3=%mf_getuniquename(prefix=getpk_ds3);
70%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);
71%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);
72%let sum=%mf_getuniquename(prefix=getpk_sum);
73%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);
74%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);
75%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);
76%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);
79%
if &mdebug=1 %then %
do;
80 %put &sysmacroname entry vars:;
87 select libname as libref
88 ,upcase(memname) as dsn
98 from dictionary.columns
99 where upcase(libname)=
"&lib"
100%
if &ds ne 0 %then %
do;
101 and upcase(memname)=
"&ds"
106%
if &engine=SQLSVR %then %
do;
109 create table work.&ds2 as
110 select * from connection to &lib(
112 s.name as SchemaName,
115 ic.key_ordinal as KeyOrderNr
118 inner join sys.tables t on s.schema_id=t.schema_id
119 inner join sys.indexes i on t.object_id=i.object_id
120 inner join sys.index_columns ic on i.object_id=ic.object_id
121 and i.index_id=ic.index_id
122 inner join sys.columns tc on ic.object_id=tc.object_id
123 and ic.column_id=tc.column_id
124 where i.is_primary_key=1
125 and s.name=%str(%
')&schema%str(%')
126 order by t.name, ic.key_ordinal ;
127 );disconnect from &lib;
130 ,
case when b.name is not
null then 1
else 0 end as pk_ind
132 left join work.&ds2 b
134 and upcase(a.name)=upcase(b.name)
139 %if &ds = 0 %then %let dsn=;
142 %mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)
146 create table &pk4sure as
153 where constraint_type='PRIMARY'
162 ,count(a.column_name) as unq_cnt
163 ,count(b.column_name) as nul_cnt
164 from work.&ds2(where=(constraint_type ='UNIQUE')) a
165 left join work.&ds2(where=(constraint_type ='NOT NULL')) b
167 and a.table_name=b.table_name
168 and a.column_name=b.column_name
170 having unq_cnt=nul_cnt;
173 create table &pkdefault as
178 ,b.column_name as name
180 left join &ds2(where=(constraint_type ='UNIQUE')) b
182 and a.table_name=b.table_name
183 and a.constraint_name=b.constraint_name
187 create table &pkfromindex as
188 select libname as libref
189 ,memname as table_name
190 ,indxname as constraint_name
191 ,indxpos as constraint_order
193 from dictionary.indexes
194 where nomiss='yes' and unique='yes' and upcase(libname)=
"&lib"
195 %if &ds ne 0 %then %do;
196 and upcase(memname)=
"&ds"
202 set &pkdefault &pk4sure &pkfromindex;
205 by libref table_name constraint_name;
207 if first.table_name then keepme=1;
208 if first.constraint_name and not first.table_name then keepme=0;
217 ,case when b.pk_ind=1 then 1 else 0 end as pk_ind
219 left join work.&finalpks b
221 and a.dsn=b.table_name
222 and upcase(a.name)=upcase(b.name)
223 order by libref,dsn,constraint_order;
229create table work.&tabs1 as select
231 ,upcase(memname) as dsn
233%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;
237 ,'n/a' as dbms_memtype format=$32.
243from dictionary.tables
244 where upcase(libname)=
"&lib"
245%if &ds ne 0 %then %do;
246 and upcase(memname)=
"&ds"
251 length pk_fields $512;
253 by libref dsn constraint_order;
254 if first.dsn then pk_fields='';
255 if pk_ind=1 then pk_fields=catx(
' ',pk_fields,name);
256 if last.dsn then output;
260create table &outds as
271 left join work.&tabs2 b
277 &ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,