今天遇到寫存儲過程遇到的一個小問題,在查詢語句中使用到了自定義的數當做列的值,然后想給這一列起一個別名 ,就直接在后面用了 as 別名。
執行存儲過程,存儲過程報錯,ERROR: failed to find conversion function from unknown to text 。意思是沒有找到一個將未知 轉換成text 的函數。
舉例說明:
在以下代碼中 ,我們需要用到臨時表update_中的三個字段來進行where條件的判斷,因為_p_year,_stat_date是存儲過程中輸入的參數 也包括'00000' ,都是要起別名當做where的條件判斷
但是類似這種,直接用的話會報上述錯誤。
所以需要加 ::text 轉換成文本類型 ::int 轉換成int類型
| UPDATE employment_status e SET cgl=update_.cgl FROM (SELECT temp_.area_code as sfdm, '00000' as yxdm, _p_year as year, --問題出現的地方 _stat_date::text as stat_date, ( ( temp_.rate - _v_avg_province_cgl_score ) / _v_stddev_province_cgl_score * 10 + 50 ) / _v_cgl_rate as cgl FROM ( SELECT inf_.area_code, rate FROM ( SELECT b.yxszsdm, b.byqxdm, 1.0 * num / total AS rate FROM ( SELECT yxszsdm, COUNT (1) AS total FROM graduate_info gra, school_info sch WHERE YEAR = _p_year AND gra.yxdm = sch.code AND sch.build_type_name NOT LIKE '科研機構' GROUP BY yxszsdm ) AS A, ( SELECT yxszsdm, byqxdm, COUNT (1) AS num FROM graduate_info gra, school_info sch WHERE YEAR = _p_year AND gra.yxdm = sch.code AND sch.build_type_name NOT LIKE '科研機構' GROUP BY yxszsdm, byqxdm ) AS b WHERE A .yxszsdm = b.yxszsdm AND byqxdm ='80' ) gra_ RIGHT JOIN ( SELECT DISTINCT u.area_code FROM user_info u, school_info s WHERE u.org_code = s.code AND s.build_type_name != '科研機構' ORDER BY area_code ) inf_ ON gra_.yxszsdm = inf_.area_code ) temp_ )update_ WHERE e.sfdm=update_.sfdm AND e.yxdm=update_.yxdm AND e.stat_date=update_.stat_date AND e.year=update_.year; |
簡單例子:
| Select * from (select 'string' as Rowname, Data From table) Union all (select 'string2' as Rowname, Data From table) |
期望輸出:
Rowname Data
string 53
string2 87
這樣的話會報錯,需要我們加一個轉換函數 ::text 修改后
| SELECT 'string'::text AS rowname, data FROM tbl1 UNION ALL SELECT 'string2', data FROM tbl2 |
