存储过程
我建立的一个存储过程如下:
create procedure p1
is
begin
select * from test;
end;
出现语法错误,请问为什么,如何解决?
问题点数:50、回复次数:12Top
1 楼fanzhaoyou(fanzhaoyou)回复于 2002-07-05 15:13:34 得分 0
在BEGIN与END之间不能这样写:
我给你一个存储过程你看看语法:
CREATE OR REPLACE PROCEDURE "GETSERIES" (
vl_name IN VARCHAR2,
vl_id IN VARCHAR2,
vl_len IN INTEGER,
vl_out OUT VARCHAR2
)
IS
cnt INTEGER;
temp INTEGER;
vl_zz VARCHAR(30);
BEGIN
SELECT count(*) INTO temp FROM t_sysinfo WHERE
rtrim(INFONAME)=rtrim(vl_name);
IF (temp<>0) THEN
BEGIN
SELECT info INTO temp FROM t_sysinfo WHERE rtrim(INFONAME)=rtrim(vl_name);
temp:=temp+1;
UPDATE t_sysinfo SET info=temp WHERE rtrim(infoname)=rtrim(vl_name);
END;
ELSE
BEGIN
temp:=1;
INSERT INTO t_sysinfo(infoname,info) VALUES(vl_name,to_char(temp));
END;
END IF;
SELECT
concat(substr('00000000000000000000',1,20-length(to_char(temp))),to_char(temp)) c into vl_zz FROM dual;
if vl_id is not null then
SELECT
concat(RTRIM(vl_id),substr(vl_zz,21-vl_len+length(RTRIM(vl_id)),vl_len)) c into vl_out
FROM dual;
else
SELECT
substr(vl_zz,21-vl_len,vl_len) c into vl_out
FROM dual;
end if;
END;
Top
2 楼3yugui(亿硅)回复于 2002-07-05 15:15:52 得分 0
这个只能在9i中可以,用来返回纪录集。
8i中,语句必须是PL/SQL语句。
如:select aa into a from bb;Top
3 楼biti_rainy(biti_rainy)回复于 2002-07-05 15:41:40 得分 0
查询出来的结果必须有变量接收Top
4 楼whchh(chengj)回复于 2002-07-05 15:44:52 得分 0
intoTop
5 楼dqwuhan()回复于 2002-07-05 16:51:17 得分 0
但是我想返回多条记录呢?Top
6 楼yfr(阿毛)回复于 2002-07-05 19:12:21 得分 0
对返回多条纪录的语句需要使用游标Top
7 楼CHENGXB(阿困)回复于 2002-07-05 19:30:22 得分 0
你们都对,^_^Top
8 楼sun9989(一品黄山)回复于 2002-07-05 21:08:47 得分 0
我刚学时也犯过一样的错,
3yugui(亿硅) 说的让我高兴:
这个只能在9i中可以,用来返回纪录集。
Top
9 楼ATCG(novel gene)回复于 2002-07-05 21:19:00 得分 0
给你一个使用游标的存储过程的例子,供参考!,也可以直接套用!
create or replace procedure test
as
type ref_cursor is ref cursor;
cursor_test ref_cursor;
my_name test.name%type;
begin
open cursor_library for
select name from test;
loop
fetch cursor_test into my_name;
exit when cursor_test%notfound;
end loop;
close cursor_test;
end test;
/Top
10 楼ATCG(novel gene)回复于 2002-07-05 21:21:34 得分 50
SORRY 刚才的存储过程有错误,应该这样!
create or replace procedure test
as
type ref_cursor is ref cursor;
cursor_test ref_cursor;
my_name test.name%type;
begin
open cursor_test for
select name from table;
loop
fetch cursor_test into my_name;
exit when cursor_test%notfound;
end loop;
close cursor_test;
end test;
/
Top
11 楼zhoubf725(zhoubf725)回复于 2002-07-05 22:28:53 得分 0
select into 就可以了。
不过你返回的记录太多了。听楼上的吧,等你的系统update到9i的时候再试试。Top




