2013-09-27 150 views
0
create table employee 
( 
employedID number, 
employeeName varchar2(30), 
deptid number, 
salary number 
); 

Create table department 
(
deptid number, 
deptname varchar2(30) 
); 

CREATE OR REPLACE PROCEDURE insertemp 
(
PemployedID IN number, 
PemployeeName IN varchar, 
Pdepid IN number, 
Psalary IN number 
) 

IS 
BEGIN 

IF Pdepid NOT IN (SELECT * from department.deptid) THEN 

INSERT INTO employee VALUES (PemployedID,’PemployeeName’,00,Psalary); 

ELSE 
INSERT INTO employee VALUES (PemployedID,’PemployeeName’,Pdepid, Psalary); 

END IF; 

COMMIT; 
END; 
/

我想創建一個存儲過程,我不熟悉oracle SQl語法。如果Pdepid不在表部門中,那麼我想在00表中插入一個記錄作爲Pdepid。爲此,我使用IF語句。我正在爲此過程收集編譯錯誤。Oracle SQL編譯錯誤 - 存儲過程

+0

,什麼是錯誤? (提示:運行'show errors'來查看它) –

+0

它說子查詢不可能在這一行: - –

+1

如果Pdepid NOT IN(SELECT * from department.deptid)那麼 –

回答

2

類似的東西應該在甲骨文工作:

CREATE OR REPLACE PROCEDURE insertemp 
(
PemployedID IN number, 
PemployeeName IN varchar, 
Pdepid IN number, 
Psalary IN number 
) 

IS 

v_tmp NUMBER; 
BEGIN 

SELECT COUNT(1) INTO v_tmp 
FROM department 
WHERE deptid = Pdepid; 

IF v_tmp = 0 THEN 

INSERT INTO employee VALUES (PemployedID,PemployeeName,00,Psalary); 

ELSE 
INSERT INTO employee VALUES (PemployedID,PemployeeName,Pdepid, Psalary); 

END IF; 


END; 

而且可以簡化這個功能類似:

CREATE OR REPLACE PROCEDURE insertemp 
(
PemployedID IN number, 
PemployeeName IN varchar, 
Pdepid IN number, 
Psalary IN number 
) 

IS 
BEGIN 

INSERT INTO employee VALUES (PemployedID,PemployeeName, 
DECODE((SELECT COUNT(1) FROM department WHERE deptid = Pdepid), 0, 0, Pdepid),Psalary); 

END; 
+0

這真的很聰明,讓我試試看 –