Auntie Anita
Auntie Anita

Reputation: 59

Oracle SQL - Column has no Corresponding Table

I came across something that makes no sense.
This is the SAAADMS form containing the Curriculum tab. The form has fields (columns) from different sources (tables). Most of these columns have a corresponding table, but the User ID and Activity Date (in the red rectangle) do not have a corresponding table!

Form with Tabs - 2 Columns with no corresponding Table

You can see that the SOVLCUR_ACTIVITY_DATE and SOVLCUR_USER_ID do not have a corresponding table. It states "N/A." The other two columns I listed (I only listed a couple since there are several) do have a corresponding table.

Column Descriptions

I am trying to pull data from the two columns with no corresponding table.
The SOVLCUR table I currently have in the code does NOT exist.

How do I find where this SOVLCUR_USER_ID and SOVLCUR_ACTIVITY_DATE data is stored or pull from a column that seems to have no table?

If the data is not really stored in SOVLCUR_USER_ID and SOVLCUR_ACTIVITY_DATE is there a way for me to see where it is stored? find all associated columns?

SELECT 
SP.SPRIDEN_ID AS "STUDENT_ID",
SP.SPRIDEN_LAST_NAME AS "LAST",
SP.SPRIDEN_FIRST_NAME AS "FIRST",
SD.SARADAP_TERM_CODE_ENTRY AS "TERM",
SD.SARADAP_APPL_DATE AS "APP_DATE",
SV.SOVLCUR_USER_ID AS "USER_ID", /*SOVLCUR table does not exist*/
SV.SOVLCUR_ACTIVITY_DATE AS "ACTIVITY_DATE", /*SOVLCUR table does not exist*/
SYSDATE

FROM
SPRIDEN SP
JOIN SARADAP SD
ON SPRIDEN_PIDM = SARADAP_PIDM
JOIN SOVLCUR SV /*This table does not exist*/
ON SPRIDEN_PIDM = SOVLCUR_PIDM

WHERE
SP.SPRIDEN_CHANGE_IND IS NULL
AND
SD.SARADAP_TERM_CODE_ENTRY >= '201510'
AND
SV.SOVLCUR_USER_ID NOT IN ('SSmith', 'JJones')
AND 
SV.SOVLCUR_ACTIVITY_DATE BETWEEN SYSDATE-1 AND SYSDATE

Upvotes: 0

Views: 8737

Answers (2)

Lalit Kumar B
Lalit Kumar B

Reputation: 49092

As user1261620 said, use ALL_TAB_COLUMNS to see the table_name corresponding to a column_name. But, as you say that few tables does not exist, perhaps, those are not tables, rather VIEWS.

To confirm whether those are TABLE or VIEW, you can query ALL_OBJECTS

SELECT object_name, object_type 
   FROM all_objects 
  WHERE object_name = 'SOVLCUR';

If the above returns no rows, that would mean the object really doesn't exist. But, in that case the query won't be executed, as it won't be parsed at all. You would get error : table/view does not exist`.

Also, not all values needs to be always stored in database. The computed values are generally calculated through a query and returned to the user for display. And other than computed values, few static values like SYSDATE can be dynamically generated rather than storing it in database and querying it.

So, I think, those are not tables, rather VIEWS. Follow the steps as I mentioned to have a clear understanding.

Update Based on OP's new inputs

So, now you know that SOVLCUR is a synonym. Execute the following query to see its details :

SELECT * FROM all_synonyms WHERE synonym_name = 'SOVLCUR';

For example,

I am user LALIT, and I create a synonym for EMP table in SCOTT schema.

SQL> show USER
USER is "LALIT"
SQL>
SQL> CREATE OR REPLACE SYNONYM lalit FOR scott.emp
  2  /

Synonym created.

SQL>
SQL> SELECT owner, synonym_name, table_owner, table_name
  2     FROM all_synonyms
  3   WHERE synonym_name = 'LALIT'
  4   /

OWNER      SYNONYM_NAME    TABLE_OWNER  TABLE_NAME
---------- --------------- ------------ ----------
LALIT      LALIT           SCOTT        EMP

So, the table_owner and table_name shows the SCHEMA is SCOTT and TABLE is EMP.

Upvotes: 1

user1261620
user1261620

Reputation: 377

Oracle provides views/tables that can be query to find out that type of information:

   select table_name from all_tab_columns
   where column_name = 'COLUMN NAME'; 

This query will return all the table where that column exists.

Upvotes: 2

Related Questions