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 がテーブル department にない場合、テーブル employees に 00 を Pdepid としてレコードを挿入したいと思います。このために、IF ステートメントを使用しています。この手順でコンパイル エラーが発生します。

4

1 に答える 1

2

そのようなものはOracleで動作するはずです:

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;
于 2013-09-27T14:25:27.890 に答える