我如何在 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 中解决这个过程(这不是家庭作业或类似的东西)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用plsql导出oracle数据建表语句,存储过程,视图.以及表中数据

在作业过程中引用作业编号 - oracle plsql

我用plsql创建的存储过程为啥是无效的?

IN() 子句 oracle PLSQL 中的数组

如何遍历 Oracle PLSQL 中的分隔列表

Oracle如何创建存储过程和如何调用存储过程