我如何在 Oracle PLSQL 中解决这个过程(这不是家庭作业或类似的东西)
Posted
技术标签:
【中文标题】我如何在 Oracle PLSQL 中解决这个过程(这不是家庭作业或类似的东西)【英文标题】:How I can resolve this Procedure in Oracle PLSQL (It's not homework or something like that) 【发布时间】:2016-09-29 17:29:54 【问题描述】:我正在学习 Oracle 数据库和 PL/SQL。我正在尝试创建一个 PROCEDURE 来查询特定员工的年薪。我的代码有什么问题?谢谢。
CREATE OR REPLACE PROCEDURE annual_salary (
p_lname IN employees23.last_name%TYPE,
p_empid IN employees23.employee_id%TYPE)
IS
BEGIN
DECLARE
v_annualsal employees23.salary%TYPE;
BEGIN
SELECT salary*12
INTO v_annualsal
FROM employees23
WHERE last_name = p_lname;
DBMS_OUTPUT.PUT_LINE(v_annualsal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No existe empleado');
END;
END annual_salary;
/
BEGIN
annual_salary('Russell');
END;
【问题讨论】:
有什么问题?您是否遇到错误或意外行为?您似乎在声明一个带有 2 个参数的过程,但您只用一个参数调用它 是的!通知错误 - ORA-06550:第 2 行,第 3 列:PLS-00306:调用“ANNUAL_SALARY”时参数的数量或类型错误 ORA-06550:第 2 行,第 3 列:PL/SQL:语句被忽略 06550。00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动: 好吧,你已经用两个参数定义了过程,然后只用一个参数调用它...... 哇我不知道!!所以...如果我在过程中定义两个参数,我必须在可执行部分中调用这两个参数?谢谢你的帮助。我很菜鸟。 对我来说当然是家庭作业。无论如何,您的 EXCEPTION 处理程序存在致命缺陷。 dbms_ouput 仅写入缓冲区。是否将该缓冲区的内容写入屏幕、打印机、鸡尾酒餐巾纸等取决于客户端程序。即使这样,也不会在程序完成之前写入。 【参考方案1】:create table employees23 as
select 10 emp_id, cast('Russell' as varchar2(30)) last_name, 6000.00 salary
from dual;
create or replace procedure annual_salary (lname employees23.last_name%type) is
annualsal employees23.salary%type;
begin
select salary*12 into annualsal
from employees23
where last_name = lname
;
dbms_output.put_line (lname || ' has ' || annualsal || ' p.a.');
exception when no_data_found then
raise_application_error (-20000, 'emploee ' || lname || ' does not exists');
end annual_salary;
/
exec annual_salary('Russell');
【讨论】:
感谢先生的帮助!以上是关于我如何在 Oracle PLSQL 中解决这个过程(这不是家庭作业或类似的东西)的主要内容,如果未能解决你的问题,请参考以下文章