create or replace package user_manage
as
 procedure query_utbs;
 procedure ins_utbs(vid number,vname utbs.username%type,vpwd utbs.userpwd%type);
 procedure del_utbs(vid number);
 procedure upd_utbs(vid number);
 function user_logo(vname utbs.username%type,vpwd utbs.userpwd%type) return number;
end user_manage;create or replace package body user_manage
as
procedure query_utbs
as 
vid number;
 vname utbs_username%type;
 vpwd utbs_userpwd%type;
cursor mycursor is
select * from utbs;
begin
open mycursor;
fetch mycursor into vid,vname,vpwd;
while mycursor%found
loop
dbms_output.put_line(vid||vname||vpwd);
fetch mycursor into vid ,vname,vpwd;
end loop;
close mycursor;
end;
procedure ins_utbs(vid number,vname utbs.username%type,vpwd utbs.userpwd%type)
as
begin
insert into utbs (userid,username,userpwd) values (vid,viname,vipwd);
end;
procedure del_utbs(vid number)
as
begin
delete from utbs where userid=vid;
end;
procedure upd_utbs(vid number)
as
begin
update utbs set userpwd='qwerrqwer' where userid=vid;
end;
function user_logo(vname utbs.username%type,vpwd utbs.userpwd%type) return number
as
outyanzheng number :=0;
cursor mycursor is select * from utbs where username=vname and userpwd=vpwd;
begin
open mycursor;
if mycursor%found=ture then outyanzheng:=1;
end if;
close mycursor;
return outyanzheng;
end;
end user_manage;不知道哪里错了

解决方案 »

  1.   

    --你真小气,连错误提示都给出来
    --试试改下吧
    create or replace package body user_manage
    as
    procedure query_utbs
    as 
    v_utbs utbs%rowtype; --不需要那么多的变量
    cursor mycursor is select * from utbs;
    begin
    open mycursor;
    fetch mycursor into vid,vname,vpwd;
    while mycursor%found
    loop
    dbms_output.put_line(v_utbs.id||v_utbs.name||v_utbs.pwd);
    fetch mycursor into vid ,vname,vpwd;
    end loop;
    close mycursor;
    end;
    procedure ins_utbs(vid number,vname utbs.username%type,vpwd utbs.userpwd%type)
    as
    begin
    insert into utbs (userid,username,userpwd) values (vid,viname,vipwd);
    end;
    procedure del_utbs(vid number)
    as
    begin
    delete from utbs where userid=vid;
    end;
    procedure upd_utbs(vid number)
    as
    begin
    update utbs set userpwd='qwerrqwer' where userid=vid;
    end;
    function user_logo(vname utbs.username%type,vpwd utbs.userpwd%type) return number
    as
    outyanzheng number :=0;
    cursor mycursor is select * from utbs where username=vname and userpwd=vpwd;
    begin
    open mycursor;
    if mycursor%found then outyanzheng:=1;  --mycursor%found=true这样是不对的
    end if;
    close mycursor;
    return outyanzheng;
    end;
    end user_manage;
      

  2.   

    Line # = 9 Column # = 21 Error Text = PLS-00201: identifier 'VID' must be declared
    Line # = 9 Column # = 1 Error Text = PL/SQL: SQL Statement ignored
    Line # = 12 Column # = 29 Error Text = PLS-00302: component 'ID' must be declared
    Line # = 12 Column # = 1 Error Text = PL/SQL: Statement ignored
    Line # = 13 Column # = 21 Error Text = PLS-00201: identifier 'VID' must be declared
    Line # = 13 Column # = 1 Error Text = PL/SQL: SQL Statement ignored
    Line # = 20 Column # = 63 Error Text = PL/SQL: ORA-00984: column not allowed here
    Line # = 20 Column # = 1 Error Text = PL/SQL: SQL Statement ignored
      

  3.   

    --声明变量有问题
    vname utbs_username%type;
     vpwd utbs_userpwd%type;--这样
    vname utbs.username%type;
     vpwd utbs.userpwd%type;
      

  4.   


    if mycursor%found then outyanzheng:=1;  
    mycursor%found=true   这样都可以
      

  5.   


    create or replace package body user_manage
    as
    procedure query_utbs
    as 
    v_utbs utbs%rowtype; --不需要那么多的变量
    cursor mycursor is select * from utbs;
    begin
    open mycursor;
    fetch mycursor into v_utbs; --这个忘了改了
    while mycursor%found
    loop
    dbms_output.put_line(v_utbs.userid||v_utbs.username||v_utbs.userpwd);
    -- 这个id、name、pwd就是v_utbs的列名
    fetch mycursor into v_utbs;
    end loop;
    close mycursor;
    end;
    procedure ins_utbs(vid number,vname utbs.username%type,vpwd utbs.userpwd%type)
    as
    begin
    insert into utbs (userid,username,userpwd) values (vid,vname,vpwd);
    --你的插入语句中变量写错了
    end;
    procedure del_utbs(vid number)
    as
    begin
    delete from utbs where userid=vid;
    end;
    procedure upd_utbs(vid number)
    as
    begin
    update utbs set userpwd='qwerrqwer' where userid=vid;
    end;
    function user_logo(vname utbs.username%type,vpwd utbs.userpwd%type) return number
    as
    outyanzheng number :=0;
    cursor mycursor is select * from utbs where username=vname and userpwd=vpwd;
    begin
    open mycursor;
    if mycursor%found then outyanzheng:=1;  --mycursor%found=true这样是不对的
    end if;
    close mycursor;
    return outyanzheng;
    end;
    end user_manage;
      

  6.   

    CREATE OR REPLACE PACKAGE user_manage AS
      PROCEDURE query_utbs;
      PROCEDURE ins_utbs(vid NUMBER, vname utbs.username%TYPE, vpwd utbs.userpwd%TYPE);
      PROCEDURE del_utbs(vid NUMBER);
      PROCEDURE upd_utbs(vid NUMBER);
      FUNCTION user_logo(vname utbs.username%TYPE, vpwd utbs.userpwd%TYPE) RETURN NUMBER;
    END user_manage;
    /CREATE OR REPLACE PACKAGE BODY user_manage AS
      PROCEDURE query_utbs AS
        vid   NUMBER;
        vname utbs.username%TYPE;--自己对照一下
        vpwd  utbs.userpwd%TYPE;--自己对照一下
        CURSOR mycursor IS
          SELECT * FROM utbs;
      BEGIN
        OPEN mycursor;
        FETCH mycursor
          INTO vid, vname, vpwd;
        WHILE mycursor%FOUND LOOP
          dbms_output.put_line(vid || vname || vpwd);
          FETCH mycursor
            INTO vid, vname, vpwd;
        END LOOP;
        CLOSE mycursor;
      END;  PROCEDURE ins_utbs(vid NUMBER, vname utbs.username%TYPE, vpwd utbs.userpwd%TYPE) AS
      BEGIN
        INSERT INTO utbs (userid, username, userpwd) VALUES (vid, vname, vpwd);--自己对照一下
      END;  PROCEDURE del_utbs(vid NUMBER) AS
      BEGIN
        DELETE FROM utbs WHERE userid = vid;
      END;  PROCEDURE upd_utbs(vid NUMBER) AS
      BEGIN
        UPDATE utbs SET userpwd = 'qwerrqwer' WHERE userid = vid;
      END;  FUNCTION user_logo(vname utbs.username%TYPE, vpwd utbs.userpwd%TYPE) RETURN NUMBER AS
        outyanzheng NUMBER := 0;
        CURSOR mycursor IS
          SELECT *
            FROM utbs
           WHERE username = vname AND
                 userpwd = vpwd;
      BEGIN
        OPEN mycursor;
        IF mycursor%FOUND THEN --自己对照一下
          outyanzheng := 1;
        END IF;
        CLOSE mycursor;
        RETURN outyanzheng;
      END;
    END user_manage;
    /
      

  7.   

    if mycursor%found then outyanzheng:=1;   
    mycursor%found=true 这样都可以
    SQL> ed
    已写入 file afiedt.buf  1  declare
      2  v_COL1 number;
      3  cursor c1 is select COL1 from test1;
      4  num number:=0;
      5  begin
      6  open c1;
      7  fetch c1 into v_COL1;
      8  if c1%found=true then
      9  num:=1;
     10  end if;
     11  dbms_output.put_line(num);
     12* end;
    SQL> /
    1PL/SQL 过程已成功完成。SQL> ed
    已写入 file afiedt.buf  1  declare
      2  v_COL1 number;
      3  cursor c1 is select COL1 from test1;
      4  num number:=0;
      5  begin
      6  open c1;
      7  fetch c1 into v_COL1;
      8  if c1%found then
      9  num:=1;
     10  end if;
     11  dbms_output.put_line(num);
     12* end;
    SQL> /
    1PL/SQL 过程已成功完成。