/* Create library reference to permanent SAS data library */ libname perm 'c:\sas\lib1'; proc sql; /* Establish connection to RDBMS */ connect to odbc(dsn="ORACLE",uid=scott,pwd=tiger); /* Build a SAS data file named t_group1 that contains all */ /* tables associated with group1 of the organization. Use the */ /* the special ODBC API call SQLTables. */ create table perm.t_group1 as select * from connection to odbc (ODBC::SQLTables, "group1"); /* Disconnect from the database */ disconnect from odbc; quit; /* Use the T_GROUP1 SAS data file to build a macro list of table */ /* names, and collect the total number of tables. This information */ /* is used by the ISEARCH macro in the next step. */ data _null_; set perm.t_group1(end=last); call symput("tab" ||left(trim(_n_)), '"' || tab_name || '"' ); if last then call symput(num_tab,_n_); end; /* The ISEARCH macro uses a macro list of tables and the total */ /* number of tables for T_GROUP1 to generate PERM.O_INDEX, a SAS */ /* data file containing one row for each primary key in the ORACLE */ /* database for GROUP1. */ %macro isearch; /* Execute one time for each table */ %do i=1 %to &num_tab; /* Use proc sql to locate primary keys */ proc sql; /* Establish a connection to the ORACLE database */ connect to odbc(dsn="ORACLE",uid=scott,pwd=tiger); /* Create a temporary SAS data file containing primary */ /* key information for a single table within the database */ create table temp as select * from connection to g1 (ODBC::SQLPrimaryKeys , , tab&i); /* Disconnect from the ORACLE database. */ disconnect from i1; quit; /* Append at each iteration of the ISEARCH macro, new */ /* primary key information to PERM.O_INDEX. */ proc append base=perm.o_index data=temp; run; %end; %mend;