【发布时间】:2011-07-22 21:41:24
【问题描述】:
我正在尝试编写一个将一行插入员工表的存储过程。如果部门不存在,则需要将该部门插入到部门表中。我有以下代码:
drop table employees;
drop table departments;
create table departments(
dept varchar2(30),
dept_number number,
dept_city varchar2(30),
CONSTRAINT pk_dept PRIMARY KEY(dept)
);
create table employees(
dept varchar2(30),
employee_name varchar2(40),
employee_id number,
CONSTRAINT pk_id PRIMARY KEY(employee_id),
CONSTRAINT fk_dept FOREIGN KEY (dept) REFERENCES departments(dept)
);
CREATE OR REPLACE PROCEDURE employeeadd(
a_dept IN VARCHAR2,
a_employee_name IN VARCHAR2,
a_employee_id IN NUMBER)
as
li_count NUMBER;
BEGIN
sp_check_dept(a_dept, li_count);
if li_count = 0 then
INSERT INTO departments (dept) values (a_dept);
return;
end if;
INSERT INTO employee values (a_dept, a_employee_name, a_employee_id);
end;
/
create or replace procedure sp_check_dept(a_dept IN NUMBER,
a_count OUT NUMBER)
as
begin
select count(*)
into a_count
from departments
where dept_number = a_dept;
end;
/
当我以 execute employeeadd('marketing', 'john', 10); 运行我的执行语句时我收到以下错误。我似乎无法弄清楚如何克服错误和/或正确编写:
ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误 ORA-06512: 在 "employeeadd" 第 8 行 ORA-06512: 在第 1 行
【问题讨论】:
-
sp_check_dept的定义是什么? -
创建或替换过程 sp_check_dept(a_dept IN NUMBER, a_count OUT NUMBER) as begin select count(*) into a_count from department where dept_number = a_dept;结尾; /
-
如果您用换行符分隔离散的错误消息将会很有帮助。您是否收到 3 个离散错误?发布两个表“departments”和“employee”的定义以及 sp_check_dept() 过程的定义也会很有用。
-
第一个错误“字符到数字的转换”一定是由于 a_dept IN VARCHAR2 参数,该参数被传递给 sp_check_dept(),它的第一个参数是 NUMBER。