--我要写一个查询用户表存储过程,性别是我要输入的参数
CREATE PROCEDURE selUser 
@SEX varchar(5)
AS
begin
 select * from UserInfo where sex=@SEX;
end;--SQLServer调用
exec selUser '男'1:请问这2步在Oracle中怎么写?
2:特别是在建过程的时候它总提示 select 没有 into 什么的,这是为什么?

解决方案 »

  1.   

    在Oracle 中 select 没有 into 配合 是没有意义的
      

  2.   

    CREATE OR REPLACE PROCEDURE SELUSER
    (
    p_SEX  IN  VARCHAR2(5)
    )
    AS
    r_USERINFO UserInfo%ROWTYPE;
    BEGIN
    SELECT * INTO r_USERINFO WHERE SEX=p_SEX AND ROWNUM=1;
    -- 如果需要打印字段在下面添加
    --DBMS_OUTPUT.PUT_LINE();
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SUBSTR('ERROR:'||SQLERRM,1,255));
    END SELUSER;在sqlplus里调用:
    exec SELUSER('男');该例子为返回一条记录,如果你要返回记录集,需要适当的修改下
      

  3.   

    create or replace package pck_test
    as 
      type type_cur is ref cursor;  --定义游标变量用于返回记录集
      procedure return_list(
       v_gender    varchar2,
       cur_out out type_cur
       );
    end  pck_test;
    /
    create or replace package body pck_test
    as
      procedure return_list(
       v_gender    varchar2,
       cur_out out type_cur
       )
       as
       begin 
       open cur_out for
         select * from UserInfo where sex=v_gender;
       end;
    end pck_test;
    /
      

  4.   

    谁来帮我啊,我需要返回很多个字段,很多条记录到前台,就像SQLServer那样。
    不是在后台打印。谢谢!
      

  5.   

    最后的cur_out 就是返回结果集,用plsql developer可以查看结果集
      

  6.   

    select * from UserInfo where sex=&sex;
      

  7.   

    To wvivw(疾风):
       多谢你!我想你的答案应该可以!我想问一下你,这个不能直接用存储过程吗?
       我看到很多程序都用包,用包有什么好处不?
      

  8.   

    To wvivw(疾风):
     好人做到底吧!1:我在 PLSQL Developer 怎么调用?
    begin 
      pck_test.return_list('a',这里我不知道填写什么);
    end;2:在java中怎么调用呢?java可以取游标吗?谢谢!有没有QQ请加我 99804335