BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
bsas94
Obsidian | Level 7

Hello experts,

 

For example, in order to check whether a table exists or not and then create a new table, I have been doing the following:

 

%IF %SYSFUNC (EXIST (foo.bar)) %THEN %DO;
    PROC SQL NOPRINT;
      DROP TABLE foo.bar;
    QUIT;
  %END;

PROC SQL NOPRINT;     CONNECT TO ORACLE AS ORA (&STRING_CONN.);           execute by ora (                 create table foo.bar as select * from foo.oldtable                  );     DISCONNECT FROM ORA; QUIT; %IF %SYSFUNC (EXIST (foo.bar2)) %THEN %DO;         PROC SQL;                DROP TABLE foo.bar2;         QUIT; %END; PROC SQL NOPRINT;     CONNECT TO ORACLE AS ORA (&STRING_CONN.);           execute by ora (                 create table foo.bar2 as select * from foo.oldtable2                  );     DISCONNECT FROM ORA; QUIT;

 

Is there any way to optimize the amount of connections being opened and use one proc sql?

 

I have been using explicit passthru to create new tables but I haven't found any way to incorporate the IF in a better way so I can group this code in one proc sql.

 

Thank you!

1 ACCEPTED SOLUTION

Accepted Solutions
SASJedi
Ammonite | Level 13

If I were doing this, I would assign a libref with a LIBNAME statement and use PROC FEDSQL to do the deed. Explicit pass-through is a one-liner in FedSQL. For example:

libname ora path=&oraclePath schema=foo user=&OraUser pw=OraPW;

proc FedSQL;
/* Implicit pass-through, FORCE ignores errors if table exists */
drop table ora.bar force; 
/* Explicit pass-through by referencing a libref as the alias */
execute (create table foo.bar as select * from foo.oldTable) by ora;
quit;


 

Check out my Jedi SAS Tricks for SAS Users

View solution in original post

2 REPLIES 2
SASJedi
Ammonite | Level 13

If I were doing this, I would assign a libref with a LIBNAME statement and use PROC FEDSQL to do the deed. Explicit pass-through is a one-liner in FedSQL. For example:

libname ora path=&oraclePath schema=foo user=&OraUser pw=OraPW;

proc FedSQL;
/* Implicit pass-through, FORCE ignores errors if table exists */
drop table ora.bar force; 
/* Explicit pass-through by referencing a libref as the alias */
execute (create table foo.bar as select * from foo.oldTable) by ora;
quit;


 

Check out my Jedi SAS Tricks for SAS Users
SASKiwi
PROC Star

It would be a lot more efficient just to query an Oracle dictionary table to see if tables exist or not:

libname myoracle oracle noprompt = <Oracle connection string>;

proc sql;
  connect using myoracle;
  select * from connection to myoracle
  (SELECT TABLE_NAME 
FROM ALL_TABLES 
WHERE TABLE_NAME like '%OLDTABLE%'
);
quit; 

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 835 views
  • 0 likes
  • 3 in conversation