2014-10-07 41 views
0

我遇到了一些毫無意義的東西。
這是包含「課程」選項卡的SAAADMS表單。表單包含來自不同來源(表格)的字段(列)。大多數這些列都有相應的表格,但用戶ID和活動日期(在紅色矩形中)沒有相應的表格!Oracle SQL - 列沒有對應的表

Form with Tabs - 2 Columns with no corresponding Table

你可以看到SOVLCUR_ACTIVITY_DATESOVLCUR_USER_ID沒有相應的表。它指出「不適用」。我列出的另外兩列(我只列出幾個,因爲有幾個)確實有一個對應的表。

Column Descriptions

我試圖拉從兩列數據,沒有相應的表。
我目前在代碼中的SOVLCUR表不存在。

我該如何找到這個SOVLCUR_USER_IDSOVLCUR_ACTIVITY_DATE數據存儲在哪裏,或者從一個似乎沒有表格的列中拉出來?

如果數據不是真的存儲在SOVLCUR_USER_IDSOVLCUR_ACTIVITY_DATE有沒有辦法讓我看看它的存儲位置?找到所有相關的列?

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 

回答

2

Oracle提供的意見/表是可以查詢,瞭解該類型的信息:如該列中存在

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

這個查詢將返回所有的表。

+0

是的,她證明它不是一個真正的專欄。謝謝。 – 2014-10-08 15:59:50

1

正如user1261620所說,使用ALL_TAB_COLUMNS來查看對應於column_name的table_name。但是,正如你所說的那樣,很少有表格不存在,也許這些表格不是表格,而是VIEWS

爲了確認這些是否TABLEVIEW,您可以查詢ALL_OBJECTS

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

如果以上未返回行,這將意味着該對象確實不存在。但是,在這種情況下,查詢將不會被執行,因爲它根本不會被解析。你會得到錯誤:表/視圖不存在。

此外,並非所有值都需要始終存儲在數據庫中。通常通過查詢來計算計算出的值並將其返回給用戶進行顯示。除了計算值以外,可以動態生成像SYSDATE這樣的靜態值,而不是將其存儲在數據庫中並進行查詢。

所以,我認爲,那些不是表格,而是VIEWS。按照我提到的步驟進行清晰的理解。

更新基於OP的新的輸入

所以,現在你知道SOVLCUR的代名詞。執行以下查詢以查看其詳細信息:

SELECT * FROM all_synonyms WHERE synonym_name = 'SOVLCUR'; 

例如,

我的用戶LALIT,我在SCOTT架構創建EMP表的代名詞。

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 

所以,table_ownertable_name顯示SCHEMASCOTTTABLEEMP

+0

對象名稱:SOVLCUR,對象類型:SYNONYM --- 因此,如果這是一個同義詞,這是否意味着SOVLCUR實際上是從另一列填充的?所以我應該找到其他專欄?如果是這樣,你有什麼想法如何找到真正的專欄? – 2014-10-08 15:59:03

+0

@AuntieAnita,在答案中查看我的更新。 – 2014-10-09 06:52:21

+0

擁有者:PUBLIC,同義詞:SOVLCUR,表所有者(架構):BANINST1,表名(表):SOVLCUR。 ---這是否意味着'SOVLCUR_USER_ID'和'SOVLCUR_ACTIVITY_DATE'位於表SOVLCUR中的BANINST1模式?如果是這樣,我可以進入那裏並從另一個模式中選擇數據嗎?或者,我將如何從我當前的查詢中選擇這兩列? – 2014-10-09 16:39:14