Dear Y'all - 

I <[EMAIL PROTECTED]> writes:

> My question is does DBI or the Oracle DBD provide any mechanism to
> extract the names of all the source tables from the SQL text that
> generates the view.

With your help I found the answer; as follows:

------------------------------------------------------------
#!/usr/bin/perl

use strict;
use Data::Dumper;
use SQL::Parser;

my $sql_cmd = "SELECT EMPLID , EFFDT ,'A' , PER_TYPE , MAR_STATUS , MAR_STATUS_DT , 
SEX , AGE_STATUS , HIGHEST_EDUC_LVL , FT_STUDENT , LANG_CD , YEARS_OF_EXP , APPLID , 
APP_DT , ALTER_EMPLID , BILINGUALISM_CODE , HEALTH_CARE_NBR , HEALTH_CARE_STATE , 
GUARDIAN_CHE , MILIT_SITUATN_ESP , SOC_SEC_AFF_DT , GVT_CRED_MIL_SVCE , 
GVT_MILITARY_COMP , GVT_MIL_GRADE , GVT_MIL_RESRVE_CAT , GVT_MIL_SEP_RET , 
GVT_MIL_SVCE_END, GVT_MIL_SVCE_START , GVT_MIL_VERIFY , GVT_PAR_NBR_LAST , 
GVT_UNIF_SVC_CTR , GVT_VET_PREF_APPT , GVT_VET_PREF_RIF , GVT_CHANGE_FLAG , 
GVT_DRAFT_STATUS , GVT_YR_ATTAINED , DISABLED_VET , DISABLED , ETHNIC_GROUP , 
GVT_DISABILITY_CD , GRADE , SAL_ADMIN_PLAN , GVT_CURR_AGCY_EMPL , GVT_CURR_FED_EMPL , 
GVT_HIGH_PAY_PLAN , GVT_HIGH_GRADE , GVT_PREV_AGCY_EMPL , GVT_PREV_FED_EMPL , 
GVT_SEP_INCENTIVE , GVT_SEP_INCENT_DT , GVT_TENURE , GVT_PAY_PLAN , BARG_UNIT , 
ENTRY_DT_FRA , MILIT_SITUATN_FRA , CPAMID , MILITARY_STAT_GER , EXPCTD_MILITARY_DT , 
HR_RESPONSIBLE_ID, MILITARY_STAT_!
 ITA , MILITARY_TYPE_ITA , MILITARY_RANK_ITA , MILITARY_END_ITA , HONSEKI_JPN , 
US_WORK_ELIGIBILTY , MILITARY_STATUS , CITIZEN_PROOF1 , CITIZEN_PROOF2 , SMOKER , 
MEDICARE_ENTLD_DT , SMOKER_DT , FP_ACTION_2 , ACTION_REASON , FP_ACTION_REQ , 
FP_SUPDOC_REQ , LAST_UPDATE_DATE , LOAD_DTTM , LASTUPDDTTM , ERROR_FLAG FROM 
PS_PERS_DATA_EFFDT PDE WHERE PDE.EFFDT = ( SELECT MAX(B.EFFDT) FROMPS_PERS_DATA_EFFDT 
B WHERE B.EMPLID = PDE.EMPLID AND ( B.EFFDT <= 
TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD') OR (B.EFFDT > 
TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD') AND 
TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD')< ( SELECT MIN(C.EFFDT) FROM 
PS_PERS_DATA_EFFDT C WHERE C.EMPLID = B.EMPLID) ) ) )";

my $parser = SQL::Parser->new( 'AnyData');
$parser->parse($sql_cmd);
use Data::Dumper;
print Dumper $parser->structure;
-----------------------------------------------------------------

Note especially:

          'table_names' => [
                             'PS_PERS_DATA_EFFDT'
                           ],

     Yours -      Billy

============================================================
     William Goedicke     [EMAIL PROTECTED]            
                          http://www.goedsole.com:8080      
============================================================

          Lest we forget:

It's a god-ridden country.

                - Victor Goedicke
_______________________________________________
Boston-pm mailing list
[EMAIL PROTECTED]
http://mail.pm.org/mailman/listinfo/boston-pm

Reply via email to