0

创建和使用不与存储在数据库中的数据交互的 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;
   /

它旨在处理包含列 FNAME 和主键 CONTACT_ID 的 CONTACT 表;上面的代码会引发编译错误:

必须声明标识符“FNAME”

如何让函数了解此列?

4

4 回答 4

2

在这一行:

fistname := TRIM(fname);

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

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

fistname := TRIM(emp_rec.fname);
于 2013-05-13T12:57:12.320 回答
0

快速浏览一下您的代码,错误似乎与该行有关

fistname := TRIM(fname);

该过程不知道 fname 是什么。

于 2013-05-13T12:57:43.147 回答
0

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

它应该是一个

SET FNAME = fistname

于 2013-05-13T13:11:22.613 回答
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;

分享和享受。

于 2013-05-13T23:36:49.620 回答