在Oracle中操作表

时间:2013-05-13 12:54:36

标签: oracle function plsql arguments

创建和使用不与数据库中存储的数据交互的pl / sql过程很容易制作和执行,但用途明显有限。

但我在处理这些存储数据时遇到了一些困难。

例如使用函数:

CREATE OR REPLACE PROCEDURE update_emp (emp_rec CONTACT%ROWTYPE) IS

  fistname VARCHAR (40);
  BEGIN
  firstname := TRIM(fname);
        UPDATE contact
        SET    FNAME = firstname
        WHERE CONTACT_ID = emp_rec.id;
   END update_emp;
   /

设计用于CONTACT表,其中包含列FNAME和主键CONTACT_ID;上面的代码抛出了一个编译错误:

  必须声明

标识符'FNAME'

如何让函数了解此列?

4 个答案:

答案 0 :(得分:2)

在这一行:

fistname := TRIM(fname);

您正在引用变量 fname,并且未声明。

我的猜测是你实际上想要使用传递给过程的记录中的fname列:

fistname := TRIM(emp_rec.fname);

答案 1 :(得分:0)

快速浏览一下代码,看起来错误就在于行

fistname := TRIM(fname);

程序不知道fname是什么。

答案 2 :(得分:0)

您声明fistname VARCHAR (40);并更新您使用的语句SET FNAME = firstname

它应该是

SET FNAME = fistname

答案 3 :(得分:0)

确实不需要firstname变量:

CREATE OR REPLACE PROCEDURE update_emp (emp_rec IN OUT CONTACT%ROWTYPE) IS
BEGIN
  UPDATE contact
    SET FNAME = TRIM(emp_rec.FNAME)
    WHERE CONTACT_ID = emp_rec.ID;
END update_emp;

分享并享受。