错误(14,7):PLS-00049:错误的绑定变量

时间:2017-03-23 17:44:53

标签: oracle plsql

我已尝试过所有内容,但Oracle 11g Express Edition为此过程提供了此错误。

  

错误(14,7):PLS-00049:错误的绑定变量

这是我的程序

create or replace procedure select_member_data
AS
 memberdata      MEMBER%rowtype;
 member_ID    MEMBER.MEMBER_ID%TYPE;
 first_name   MEMBER.FIRST_NAME%TYPE;
 last_name    MEMBER.LAST_NAME%TYPE;
 address      MEMBER.ADDRESS%TYPE;
 total_rows number(2);
BEGIN
 SELECT MEMBER_ID,first_name,last_name,address
 INTO :memberdata
 FROM MEMBER where member_id= 1 ;
 IF sql%notfound THEN  
  dbms_output.put_line('no records fetched');  
 ELSIF sql%found THEN     
  dbms_output.put_line( total_rows ||' fetched');  
 END IF;   
END;

这是我的表

CREATE TABLE MEMBER (
MEMBER_ID  INT PRIMARY KEY,
LAST_NAME VARCHAR2(25) NOT NULL,
FIRST_NAME varchar2(25),
ADDRESS varchar2(100),
CITY varchar2(30),
PHONE varchar2(15),
JOIN_DATE  date  DEFAULT SYSDATE NOT NULL  
);

1 个答案:

答案 0 :(得分:3)

你在做:

 SELECT MEMBER_ID,first_name,last_name,address
 INTO :memberdata
 ...

memberdata是本地PL / SQL变量,而不是绑定变量,所以它应该是:

 SELECT MEMBER_ID,first_name,last_name,address
 INTO memberdata
 ...

您也没有在%rowtype变量中获取足够的列。您的表有七列,因此您的memberdata记录变量也有七个字段;但是你的查询只选择了四列 - 这还不够。 (有点令人困惑的是,这被报告为太多的值,而不是没有足够的值)。

您可以列出所有列名称,但这是一个罕见的情况,使用*可能更好(或至少是合理的):

 SELECT *
 INTO memberdata
 ...

或者您已经定义了其他变量,您可以这样做:

 SELECT MEMBER_ID,first_name,last_name,address
 INTO member_ID, first_name, last_name, address
 ...

虽然我强烈建议你没有与列名相同的变量名;通常在局部变量前加上用于识别它们的东西,例如, l_member_id

但你的逻辑是有缺陷的。如果您的查询没有得到一行,那么将抛出无数据或太多行异常。 (由于这里的主键,你不能有多个,但你找不到)。 <{1}}检查将无法到达。