2013-01-08 32 views
0

我有這樣的代碼包:無法獲取的行數

BEGIN 
     IF user_status_i = 'all' THEN 
     OPEN l_get_data FOR 

     SELECT 
      row_number() OVER (ORDER BY u.us_fullname) rn, 
      a2.av_value as first_name, a3.av_value as last_name, a4.av_value as email, a5.av_value as phone, 
      u.us_id, u.us_fullname, a6.av_value as user_type, a7.av_value as line_manager_1, 
      a8.av_value as line_manager_2, a9.av_value as line_manager_3, a10.av_value as line_manager_4, 
      a11.av_value as line_manager_5, u.us_flags, a12.av_value as business_unit, 
      a13.av_value as position, a14.av_value as middlename 
      FROM us_user u 

       INNER JOIN av_attrvalue a1 
        ON a1.AV_TOKEN = 'USER:'||u.US_ID AND a1.AV_AP_ID='InSign' AND a1.av_at_id = 'Code' AND a1.av_value = id_i 
       INNER JOIN av_attrvalue a2 
        ON a2.AV_TOKEN = 'USER:'||u.US_ID AND a2.AV_AP_ID='InSign' AND a2.av_at_id = 'FIRSTNAME' 
       INNER JOIN av_attrvalue a3 
        ON a3.AV_TOKEN = 'USER:'||u.US_ID AND a3.AV_AP_ID='InSign' AND a3.av_at_id = 'LASTNAME' 
       INNER JOIN av_attrvalue a4 
        ON a4.AV_TOKEN = 'USER:'||u.US_ID AND a4.AV_AP_ID='InSign' AND a4.av_at_id = 'ADDR' 
       LEFT OUTER JOIN av_attrvalue a5 
        ON a5.AV_TOKEN = 'USER:'||u.US_ID AND a5.AV_AP_ID='InSign' AND a5.av_at_id = 'MobilePhone' 
       INNER JOIN av_attrvalue a6 
        ON a6.AV_TOKEN = 'USER:'||u.US_ID AND a6.AV_AP_ID='InSign' AND a6.av_at_id = 'Type' AND a6.av_value != 'trAgent' 
       LEFT OUTER JOIN av_attrvalue a7 
        ON a7.AV_TOKEN = 'USER:'||u.US_ID AND a7.AV_AP_ID='InSign' AND a7.av_at_id = 'Line1' 
       LEFT OUTER JOIN av_attrvalue a8 
        ON a8.AV_TOKEN = 'USER:'||u.US_ID AND a8.AV_AP_ID='InSign' AND a8.av_at_id = 'Line2' 
       LEFT OUTER JOIN av_attrvalue a9 
        ON a9.AV_TOKEN = 'USER:'||u.US_ID AND a9.AV_AP_ID='InSign' AND a9.av_at_id = 'Line3' 
       LEFT OUTER JOIN av_attrvalue a10 
        ON a10.AV_TOKEN = 'USER:'||u.US_ID AND a10.AV_AP_ID='InSign' AND a10.av_at_id = 'Line4' 
       LEFT OUTER JOIN av_attrvalue a11 
        ON a11.AV_TOKEN = 'USER:'||u.US_ID AND a11.AV_AP_ID='InSign' AND a11.av_at_id = 'Line5' 
       LEFT OUTER JOIN av_attrvalue a12 
        ON a12.AV_TOKEN = 'USER:'||u.US_ID AND a12.AV_AP_ID='InSign' AND a12.av_at_id = 'Unit' 
       LEFT OUTER JOIN av_attrvalue a13 
        ON a13.AV_TOKEN = 'USER:'||u.US_ID AND a13.AV_AP_ID='InSign' AND a13.av_at_id = 'Position' 
      LEFT OUTER JOIN av_attrvalue a14 
        ON a14.AV_TOKEN = 'USER:'||u.US_ID AND a14.AV_AP_ID='InSign' AND a14.av_at_id = 'MIDDLENAME' 
       INNER JOIN hds_hub_companies hc ON hc.company_id = a1.av_value 

WHERE rn BETWEEN (pageN_i * records_i) - records_i + 1 AND (pageN_i * records_i); 



     END IF; 

我試圖讓行號,但是當我執行它我收到2個錯誤:

Error(1323,5): PL/SQL: SQL Statement ignored 

Error(1361,14): PL/SQL: ORA-00904: "RN": invalid identifier 

,因爲昨天我在這個戰鬥,我敢肯定有小的財產以後我失蹤

+0

也許用「爲RN」 – Grixxly

+0

@grixxly就試了一下,得到了相同的2個錯誤 – Slim

+1

嘗試是這樣的http://stackoverflow.com/questions/356675/使用別名在哪裏子句 – Grixxly

回答

1

您需要將它作爲一個塊工作,因爲別名不能在同一個塊中訪問。

select * From(
SELECT 
    row_number() OVER (ORDER BY u.us_fullname) rn, 
    a2.av_value as first_name, a3.av_value as last_name, a4.av_value as email, a5.av_value as phone, 
    u.us_id, u.us_fullname, a6.av_value as user_type, a7.av_value as line_manager_1, 
    a8.av_value as line_manager_2, a9.av_value as line_manager_3, a10.av_value as line_manager_4, 
    a11.av_value as line_manager_5, u.us_flags, a12.av_value as business_unit, 
    a13.av_value as position, a14.av_value as middlename 
    FROM us_user u 

      INNER JOIN av_attrvalue a1 
       ON a1.AV_TOKEN = 'USER:'||u.US_ID AND a1.AV_AP_ID='InSign' AND a1.av_at_id = 'Code' AND a1.av_value = id_i 
      INNER JOIN av_attrvalue a2 
       ON a2.AV_TOKEN = 'USER:'||u.US_ID AND a2.AV_AP_ID='InSign' AND a2.av_at_id = 'FIRSTNAME' 
      INNER JOIN av_attrvalue a3 
       ON a3.AV_TOKEN = 'USER:'||u.US_ID AND a3.AV_AP_ID='InSign' AND a3.av_at_id = 'LASTNAME' 
      INNER JOIN av_attrvalue a4 
       ON a4.AV_TOKEN = 'USER:'||u.US_ID AND a4.AV_AP_ID='InSign' AND a4.av_at_id = 'ADDR' 
      LEFT OUTER JOIN av_attrvalue a5 
       ON a5.AV_TOKEN = 'USER:'||u.US_ID AND a5.AV_AP_ID='InSign' AND a5.av_at_id = 'MobilePhone' 
      INNER JOIN av_attrvalue a6 
       ON a6.AV_TOKEN = 'USER:'||u.US_ID AND a6.AV_AP_ID='InSign' AND a6.av_at_id = 'Type' AND a6.av_value != 'trAgent' 
      LEFT OUTER JOIN av_attrvalue a7 
       ON a7.AV_TOKEN = 'USER:'||u.US_ID AND a7.AV_AP_ID='InSign' AND a7.av_at_id = 'Line1' 
      LEFT OUTER JOIN av_attrvalue a8 
       ON a8.AV_TOKEN = 'USER:'||u.US_ID AND a8.AV_AP_ID='InSign' AND a8.av_at_id = 'Line2' 
      LEFT OUTER JOIN av_attrvalue a9 
       ON a9.AV_TOKEN = 'USER:'||u.US_ID AND a9.AV_AP_ID='InSign' AND a9.av_at_id = 'Line3' 
      LEFT OUTER JOIN av_attrvalue a10 
       ON a10.AV_TOKEN = 'USER:'||u.US_ID AND a10.AV_AP_ID='InSign' AND a10.av_at_id = 'Line4' 
      LEFT OUTER JOIN av_attrvalue a11 
       ON a11.AV_TOKEN = 'USER:'||u.US_ID AND a11.AV_AP_ID='InSign' AND a11.av_at_id = 'Line5' 
      LEFT OUTER JOIN av_attrvalue a12 
       ON a12.AV_TOKEN = 'USER:'||u.US_ID AND a12.AV_AP_ID='InSign' AND a12.av_at_id = 'Unit' 
      LEFT OUTER JOIN av_attrvalue a13 
       ON a13.AV_TOKEN = 'USER:'||u.US_ID AND a13.AV_AP_ID='InSign' AND a13.av_at_id = 'Position' 
    LEFT OUTER JOIN av_attrvalue a14 
       ON a14.AV_TOKEN = 'USER:'||u.US_ID AND a14.AV_AP_ID='InSign' AND a14.av_at_id = 'MIDDLENAME' 
      INNER JOIN hds_hub_companies hc ON hc.company_id = a1.av_value 
)x 
WHERE rn BETWEEN (pageN_i * records_i) - records_i + 1 AND (pageN_i * records_i); 
+0

錯誤(1368,5):PL/SQL:SQL語句被忽略和錯誤(1369,51):PL/SQL:ORA-00907:缺少右括號'我無法理解,因爲我擁有一切正確的東西,所以右括號缺失 - NVM我得到了它的工作!巨大的感謝! – Slim

1

別名rn在同一語句範圍中不可用。您需要使用派生表如下圖所示

SELECT * FROM 
(
SELECT 
      row_number() OVER (ORDER BY u.us_fullname) rn, 
      a2.av_value as first_name, a3.av_value as last_name, a4.av_value as email, a5.av_value as phone, 
      u.us_id, u.us_fullname, a6.av_value as user_type, a7.av_value as line_manager_1, 
      a8.av_value as line_manager_2, a9.av_value as line_manager_3, a10.av_value as line_manager_4, 
      a11.av_value as line_manager_5, u.us_flags, a12.av_value as business_unit, 
      a13.av_value as position, a14.av_value as middlename 
      FROM us_user u 

       INNER JOIN av_attrvalue a1 
        ON a1.AV_TOKEN = 'USER:'||u.US_ID AND a1.AV_AP_ID='InSign' AND a1.av_at_id = 'Code' AND a1.av_value = id_i 
       INNER JOIN av_attrvalue a2 
        ON a2.AV_TOKEN = 'USER:'||u.US_ID AND a2.AV_AP_ID='InSign' AND a2.av_at_id = 'FIRSTNAME' 
       INNER JOIN av_attrvalue a3 
        ON a3.AV_TOKEN = 'USER:'||u.US_ID AND a3.AV_AP_ID='InSign' AND a3.av_at_id = 'LASTNAME' 
       INNER JOIN av_attrvalue a4 
        ON a4.AV_TOKEN = 'USER:'||u.US_ID AND a4.AV_AP_ID='InSign' AND a4.av_at_id = 'ADDR' 
       LEFT OUTER JOIN av_attrvalue a5 
        ON a5.AV_TOKEN = 'USER:'||u.US_ID AND a5.AV_AP_ID='InSign' AND a5.av_at_id = 'MobilePhone' 
       INNER JOIN av_attrvalue a6 
        ON a6.AV_TOKEN = 'USER:'||u.US_ID AND a6.AV_AP_ID='InSign' AND a6.av_at_id = 'Type' AND a6.av_value != 'trAgent' 
       LEFT OUTER JOIN av_attrvalue a7 
        ON a7.AV_TOKEN = 'USER:'||u.US_ID AND a7.AV_AP_ID='InSign' AND a7.av_at_id = 'Line1' 
       LEFT OUTER JOIN av_attrvalue a8 
        ON a8.AV_TOKEN = 'USER:'||u.US_ID AND a8.AV_AP_ID='InSign' AND a8.av_at_id = 'Line2' 
       LEFT OUTER JOIN av_attrvalue a9 
        ON a9.AV_TOKEN = 'USER:'||u.US_ID AND a9.AV_AP_ID='InSign' AND a9.av_at_id = 'Line3' 
       LEFT OUTER JOIN av_attrvalue a10 
        ON a10.AV_TOKEN = 'USER:'||u.US_ID AND a10.AV_AP_ID='InSign' AND a10.av_at_id = 'Line4' 
       LEFT OUTER JOIN av_attrvalue a11 
        ON a11.AV_TOKEN = 'USER:'||u.US_ID AND a11.AV_AP_ID='InSign' AND a11.av_at_id = 'Line5' 
       LEFT OUTER JOIN av_attrvalue a12 
        ON a12.AV_TOKEN = 'USER:'||u.US_ID AND a12.AV_AP_ID='InSign' AND a12.av_at_id = 'Unit' 
       LEFT OUTER JOIN av_attrvalue a13 
        ON a13.AV_TOKEN = 'USER:'||u.US_ID AND a13.AV_AP_ID='InSign' AND a13.av_at_id = 'Position' 
      LEFT OUTER JOIN av_attrvalue a14 
        ON a14.AV_TOKEN = 'USER:'||u.US_ID AND a14.AV_AP_ID='InSign' AND a14.av_at_id = 'MIDDLENAME' 
       INNER JOIN hds_hub_companies hc ON hc.company_id = a1.av_value 
) T 
WHERE rn BETWEEN (pageN_i * records_i) - records_i + 1 AND (pageN_i * records_i);