台灣最大程式設計社群網站
線上人數
766
 
會員總數:246038
討論主題:189625
歡迎您免費加入會員
討論區列表 >> Oracle >> 新手請教Oracle Stored Procedure
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
新手請教Oracle Stored Procedure
價值 : 40 QP  點閱數:2298 回應數:2
樓主

水瓶牧羊犬
門外漢
0 6
118 10
發送站內信

請教各位大大,小的是oracle新手
現在想寫一個Stored Procedure功能是將TMP_A_SITE table的資料轉入A_SITE table裡面
update不到資料時就改用insert。
但現在一直出現錯誤訊息,希望各位大大賜教。

錯誤訊息:
java.sql.SQLException: ORA-06550: 第 1 行, 第 7 個欄位:
PLS-00905: 物件 USERA.A_SITE 無效
ORA-06550: 第 1 行, 第 7 個欄位:
PL/SQL: Statement ignored


PL/SQL程式碼:
CREATE OR REPLACE PROCEDURE USERA.UPD_A_SITE (ret OUT NUMBER )IS
BEGIN
DECLARE
DECODE_n A_SITE.DECODE%TYPE;
DEABBR_n A_SITE.DEABBR%TYPE;
DENAME_n A_SITE.DENAME%TYPE;
DECVOW_n A_SITE.DECVOW%TYPE;
DECOMN_n A_SITE.DECOMN%TYPE;
DETETL_n A_SITE.DETETL%TYPE;
DELOCK_n A_SITE.DELOCK%TYPE;
DEKIND_n A_SITE.DEKIND%TYPE;
DEZZPN_n A_SITE.DEZZPN%TYPE;
DEADDR_n A_SITE.DEADDR%TYPE;
DEIDNO_n A_SITE.DEIDNO%TYPE;
DEFANO_n A_SITE.DEFANO%TYPE;
DELEVL_n A_SITE.DELEVL%TYPE;
DEGPNO_n A_SITE.DEGPNO%TYPE;
UPDDATE_n A_SITE.UPDDATE%TYPE;
VFALG_n A_SITE.VFALG%TYPE;
CLASS1_n A_SITE.CLASS1%TYPE;
CLASSNAME1_n A_SITE.CLASSNAME1%TYPE;
CLASS2_n A_SITE.CLASS2%TYPE;
CLASSNAME2_n A_SITE.CLASSNAME2%TYPE;
CLASS3_n A_SITE.CLASS3%TYPE;
CLASSNAME3_n A_SITE.CLASSNAME3%TYPE;
CLASS4_n A_SITE.CLASS4%TYPE;
CLASSNAME4_n A_SITE.CLASSNAME4%TYPE;
CLASS5_n A_SITE.CLASS5_n%TYPE;
CLASSNAME5_n A_SITE.CLASSNAME5_n%TYPE;
ISALIVE_n A_SITE.ISALIVE%TYPE;
ISALIVEDATE_n A_SITE.ISALIVEDATE%TYPE;
VFLAGDATE_n A_SITE.VFLAGDATE%TYPE;
CREATEUSER_n A_SITE.CREATEUSER%TYPE;
UPDATEUSER_n A_SITE.UPDATEUSER%TYPE;
CREATETIME_n A_SITE.CREATETIME%TYPE;
UPDATETIME_n A_SITE.UPDATETIME%TYPE;
SYSMEMO_n A_SITE.SYSMEMO%TYPE;


CURSOR SEL_DATA IS
select * from TMP_A_SITE
where ISALIVE='Y';
BEGIN
SET TRANSACTION USE ROLLBACK SEGMENT RBK_LARGE2;
OPEN SEL_DATA;
LOOP
BEGIN
FETCH SEL_DATA
INTO vcode_n,dpod_n,cvcit_n,vgencode_n;
EXIT WHEN SEL_DATA%NOTFOUND;

BEGIN
update A_SITE
set DEABBR=DEABBR_n,
DENAME=DENAME_n,DECVOW=DECVOW_n,
DECOMN=DECOMN_n,DETETL=DETETL_n,
DELOCK=DELOCK_n,DEKIND=DEKIND_n,
DEZZPN=DEZZPN_n,DEADDR=DEADDR_n,
DEIDNO=DEIDNO_n,DEFANO=DEFANO_n,
DELEVL=DELEVL_n,DEGPNO=DEGPNO_n,
UPDDATE=UPDDATE_n,VFALG=VFALG_n,
CLASS1=CLASS1_n,CLASSNAME1=CLASSNAME1_n,
CLASS2=CLASS2_n,CLASSNAME2=CLASSNAME2_n,
CLASS1=CLASS3_n,CLASSNAME3=CLASSNAME3_n,
CLASS1=CLASS4_n,CLASSNAME4=CLASSNAME4_n,
CLASS1=CLASS5_n,CLASSNAME5=CLASSNAME5_n,
ISALIVE=ISALIVE_n,ISALIVEDATE=ISALIVEDATE_n,
VFLAGDATE=VFLAGDATE_n,CREATEUSER=CREATEUSER_n,
UPDATEUSER=UPDATEUSER_n,CREATETIME=CREATETIME_n,
UPDATETIME=UPDATETIME_n,SYSMEMO=SYSMEMO_n
where DECODE = DECODE_n;

if SQL%ROWCOUNT <= 0 then
insert into A_SITE(DEABBR,
DENAME,DECVOW,
DECOMN,DETETL,
DELOCK,DEKIND,
DEZZPN,DEADDR,
DEIDNO,DEFANO,
DELEVL,DEGPNO,
UPDDATE,VFALG,
CLASS1,CLASSNAME1,
CLASS2,CLASSNAME2,
CLASS3,CLASSNAME3,
CLASS4,CLASSNAME4,
CLASS5,CLASSNAME5,
ISALIVE,ISALIVEDATE,
VFLAGDATE,CREATEUSER,
UPDATEUSER,CREATETIME,
UPDATETIME,SYSMEMO
)
values(DEABBR_n,
DENAME_n,DECVOW_n,
DECOMN_n,DETETL_n,
DELOCK_n,DEKIND_n,
DEZZPN_n,DEADDR_n,
DEIDNO_n,DEFANO_n,
DELEVL_n,DEGPNO_n,
UPDDATE_n,VFALG_n,
CLASS1_n,CLASSNAME1_n,
CLASS2_n,CLASSNAME2_n,
CLASS3_n,CLASSNAME3_n,
CLASS4_n,CLASSNAME4_n,
CLASS5_n,CLASSNAME5_n,
ISALIVE_n,ISALIVEDATE_n,
VFLAGDATE_n,CREATEUSER_n,
UPDATEUSER_n,CREATETIME_n,
UPDATETIME_n,SYSMEMO_n);
end if;
EXCEPTION
ret:=-2;
RETURN;



END
END LOOP;
COMMIT;
SET TRANSACTION USE ROLLBACK SEGMENT RBK_LARGE;
ret:=0;
RETURN;

EXCEPTION
ret:=-1;
RETURN;
END;
END UPD_A_SITE;

搜尋相關Tags的文章: [ Oracle ] , [ Stored Procedure ] , [ 新手 ] , [ PLS-00905 ] , [ ORA-06550 ] , [ PL/ ] ,
本篇文章發表於2014-08-20 15:17
1樓
回應

Yafuu168
檢舉此回應
看你的pl.sql 頭跟尾兩句,名稱似乎不同?

CREATE OR REPLACE PROCEDURE USERA.UPD_A_SITE (ret OUT NUMBER )IS
END UPD_A_SITE;
本篇文章回覆於2014-10-08 13:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
建議使用MERGE INTO
本篇文章回覆於2014-11-25 10:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.