求一条简单的oracle查询存储过程

1.建立序列createsequenceseq_user_informationincrementby1startwith1nomaxvaluenocyclecache1... 1.建立序列
create sequence seq_user_information
increment by 1
start with 1
nomaxvalue
nocycle
cache 10
2.建立表
create table user_information
(
user_id primary key,
user_login_name varchar2(30) not null,
user_password varchar2(50),
user_name varchar2(20),
user_telephone varchar2(20),
user_type number(5),
creation_date date not null,
last_update_date not nul
)
3.建立过程
create or replace procedurce insert_user_information
(
p_user_login_name in varchar2,
p_user_password in varchar2,
p_user_name in varchar2,
p_user_telephone in varchar2,
p_user_type in number
)
as
BEGIN
insert into user_information
values
(seq_user_information.nextval,upper(p_user_login_name),p_user_password,p_user_name,p_user_telephone,p_user_type,sysdate,sysdate);
commit;
end;
4.执行过程
exec insert_user_information('小猪','123456',''初学者,'15880198606',0);

如题:我在oracle数据库里面建立好了数据库,由于我没有人知道,写的代码很乱,现在我想求几条sql查询的存储过程!
要求:1.查询表里的所有记录
2.查询某一个字段的存储过程
好像要用到游标,但是我不是很懂,我想让大家帮我写一个,领我入门
如果回答的好,我会追加分数!谢谢大家了!我是很诚恳的!

create or replace procedurce select_user_information
(
p_user_login_name in varchar2
)
as
aa varchar2
begin
select user_telephone into aa from user_infomation where user_telephone:='p_user_login_name';
end;

我写的这个查询过程有错误!
create or replace procedurce select_user_information
(
p_user_login_name in varchar2
)
as
aa varchar2(30);
begin
select user_login_name into aa from user_information where user_login_name='p_user_login_name';
end;

这个过程能通过!
当我执行
exec select_user_information('小猪');
说没有数据源!!?
展开
 我来答
奔驰M888
2009-07-25 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1846
采纳率:0%
帮助的人:2713万
展开全部
**********
补充:已经解释过了,原因是你的【'p_user_login_name'】两遍有引号,你把引号去掉就可以了,如果不去的话数据库实际执行的sql是:
【select user_telephone into aa from user_infomation where user_telephone='p_user_login_name'】而不是【select user_telephone into aa from user_infomation where user_telephone='小猪'】
**********

1、首先你的查询存储过程是有问题的
【user_telephone:='p_user_login_name'】改成
【user_telephone=p_user_login_name】,【aa varchar2】后面加一个【;】。
再加一个打印语句即可:
dbms_output.put_line(aa);[注意想看到打印结果必须 set serveroutput on]
原因:
【:=】是赋值符号。
【p_user_login_name】是存储过程传入的变量,加上引号就变成字符串了,里面的值就得不到了。

2、如果你查询的结果只有一条记录的话,按照上面改正之后就没有问题了,如果是多条记录就要用到游标,因为你的where条件是动态传入的,要使用游标变量。
var p_cursor refcursor;
create or replace procedurce select_user_information
(
p_user_login_name in varchar2
)
as
begin
open :p_cursor for
'select user_telephone from user_infomation where user_telephone='||p_user_login_name;
end;
/
print p_cursor;

说明:因为上面那个游标变量是在存储过程外面定义的,所以在存储过程内部引用的时候要使用[:]。

**************
再补充一个直接在存储过程内部定义的列子:
create or replace procedurce select_user_information
(
p_user_login_name in varchar2
)
as
aa varchar2;
type refcur is ref cursor;
p_cursor refcur;
begin
open p_cursor for
'select user_telephone from user_infomation where user_telephone='||p_user_login_name;
loop
fetch p_cursor into aa;
exit when p_cursor%NOTFOUND;
dbms_output.put_line(aa);
end loop;
end;
/

---
以上,希望对你有所帮助。
csuxp2008
2009-07-25 · TA获得超过6485个赞
知道大有可为答主
回答量:4704
采纳率:50%
帮助的人:2473万
展开全部
1.要查询表里的所有记录,使用select * from table_name
2.这个问题看不懂,什么叫做字段的存储过程?

还有你想要查询一些信息,直接select就可以了嘛,为什么要写到存储过程中去,搞的这么复杂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华夏日长兴
2009-07-25 · TA获得超过9593个赞
知道大有可为答主
回答量:6305
采纳率:85%
帮助的人:3752万
展开全部
create or replace procedurce select_user_information
(
p_user_login_name in varchar2
)
as
aa varchar2
begin
select user_telephone into aa from user_infomation where user_telephone='p_user_login_name';
end;

等号前的冒号不用加啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式