今天跑程式,產生報表在 EXCEL ,
五分鐘前還好好的,結果突然就跑出一個錯誤訊息
【OLE error 800A03EC】?
不知道為什麼,一開始還以為 Oracle 的權限又跑掉了,
跑了權限的 SQL 結果還是一樣,
跑了別張報表發現也一樣?
把程式關掉重開還是一樣?
只好拜訪一下估狗大神了。
【OLE error 800A03EC - Toolbox for IT Groups】
隨便看了一下,
感覺應該是要利用 OLE 轉資料到 EXCEL 的時候出現錯誤,
恩~~~看到這邊,決定把 EXCEL 關起來再跑報表看看,
果然就可以了,筆記一下。
實驗證明,應該是 EXCEL 再輸入的狀態下是沒辦法轉出 EXCEL 的,
所以只要不是在輸入狀態下就可以轉出了,不用關閉所有的 EXCEL ,以上。
2014年6月17日 星期二
2014年6月12日 星期四
Oracle - 找出壞掉的物件重新 compile
最近在交易檔加了一個欄位,然後一干人等全部都壞掉了,
因為壞掉的有一狗票,所以不太可能一個、一個慢慢去把它修好,
所以找了一下,寫成以下偷懶寫法:
SELECT 'ALTER ' || DECODE(SUBSTR(OBJECT_TYPE, 1, 7), 'PACKAGE', ' PACKAGE', OBJECT_TYPE)
|| ' ' || OBJECT_NAME || ' COMPILE'
|| DECODE(SUBSTR(OBJECT_TYPE, 1, 7), 'PACKAGE', ' PACKAGE;', ';')
FROM USER_OBJECTS
WHERE OBJECT_TYPE IN ('FUNCTION', 'PROCEDURE', 'PACKAGE', 'PACKAGE BODY')
AND STATUS = 'INVALID';
簡單的說就是透過 USER_OBJECTS 這個資料表的 STATUS 來找出壞掉的物件,
要注意的是 PACKAGE 的 OBJECT_TYPE 會分成 PACKAGE 跟 PACKAGE BODY 這兩個,
所以要特別處理一下。
參考一下 ALTER PACKAGE
可以針對 PACKAGE BODY Recompile ,可能有省一點工吧?
ALTER PACKAGE hr.emp_mgmt COMPILE BODY;
不過我想我還是直接對整個 PACKAGE Compile 吧!
ALTER PACKAGE emp_mgmt COMPILE PACKAGE;
我想等等阿輝應該會解釋一下兩者的差異,
我是看了半天看不出來,不知道是英文不好?還是他沒解釋?
阿輝換你了!(啪)2014年6月6日 星期五
Oracle - 如何在 CURSOR 裡面直接更新該筆資料
每次看到同事寫的程式裡面有一點是我覺得很奇怪的,
明明我就是抓某個 TABLE 裡面的某些資料出來,
為什麼在 FOR LOOP 裡面要更新那一筆資料的時候,
卻還是下 UPDATE 該 TABLE 然後一堆條件呢?
所以今天在寫個 FUNC 的時候就想說來找一下,
應該會有比較
找到了下面這個說明
【[Chapter 6] 6.11 SELECT FOR UPDATE in Cursors】
看起來應該可以,試了一下,
挑了一種我覺得比較
CURSOR CUR_TEST IS
SELECT *
FROM TB_TEST
FOR UPDATE;
只要在 CURSOR 最後面加上 FOR UPDATE 就可以了,很簡單。
然後 FOR LOOP 裡面的寫法也很簡單,如下:
FOR REC_TEST IN CUR_TEST
LOOP
UPDATE TB_TEST
SET CALC_AMT = 10000000
WHERE CURRENT OF CUR_TEST;
END LOOP;
重點是 WHERE 條件的寫法 CURRENT OF CUR_TEST 就可以了,
夠簡單,讚!
進步始終來自於惰性!共勉之~~~
訂閱:
文章 (Atom)