SQL> create or replace procedure pro_delete 2 as 3 begin 4 select * from bmb; 5 commit; 6 end pro_delete; 7 /警告: 创建的过程带有编译错误。SQL> 请问这个最简单的存储过程错在哪个地方? 小弟刚学oracle请各位大虾指教。
不能直接 select 存储过程是PL/SQL块,结果转储为另一张,或打印出来是可以的。但就是不能直接select,这和sql不同。可以改成 insert into table1 select * from table2; commit;
在存储过程中要使用select ... into ... from table1 也就是你必须要将查询列保存到相应的变量之中,普通变量只能存放一个值 如果查询的一个数据集(有多行记录),可以使用游标循环来处理 create or replace procedure pro_delete as v_col1 varchar2(20); begin -- 查询一行记录,将列col1的值保存到变量v_col1中 select col1 into v_col1 from bmb where rownum<2; --屏幕上显示v_col1的值 dbms_output.put_line(v_col1); --commit; end pro_delete; /
必须要执行操作。不能只是 select 比如说 select into
看你的过程的内容 你是想建一个视图吗? 存储过程是用来操作复杂的逻辑的 用简单的sql无法完成才要用过程 你只有select 没有操作 是不行的 要么不用select 要么是 select col into 变量名 form table
给你看一个我自己建的存储过程 create or replace procedure mw_app.mwp_graderank ( stdGrade in number, yxxskm out varchar2, ybxskm out varchar2 ) is p_stdgrade number := stdGrade; p_grade number; begin select grade into p_grade from mw_app.mwt_gradeinfo; if(p_grade>p_stdgrade)then select gra.stuname||gra.stuname into yxxskm from mw_app.mwt_gradeinfo gra; elsif(p_grade=p_stdgrade)then select gra.stuname||gra.stuname into yxxskm from mw_app.mwt_gradeinfo gra; else select gra.stuname||gra.stuname into ybxskm from mw_app.mwt_gradeinfo gra; end if; end; 调用的时候 传进来一个成绩标准,如果成绩大于这个标准做一种处理,小于该标准做一种处理,再把结果返回
存储过程是PL/SQL块,结果转储为另一张,或打印出来是可以的。但就是不能直接select,这和sql不同。可以改成
insert into table1
select * from table2;
commit;
也就是你必须要将查询列保存到相应的变量之中,普通变量只能存放一个值
如果查询的一个数据集(有多行记录),可以使用游标循环来处理
create or replace procedure pro_delete as
v_col1 varchar2(20);
begin
-- 查询一行记录,将列col1的值保存到变量v_col1中
select col1 into v_col1 from bmb where rownum<2;
--屏幕上显示v_col1的值
dbms_output.put_line(v_col1);
--commit;
end pro_delete;
/
比如说 select into
存储过程是用来操作复杂的逻辑的 用简单的sql无法完成才要用过程
你只有select 没有操作 是不行的
要么不用select 要么是 select col into 变量名 form table
create or replace procedure mw_app.mwp_graderank
(
stdGrade in number,
yxxskm out varchar2,
ybxskm out varchar2
)
is
p_stdgrade number := stdGrade;
p_grade number;
begin
select grade into p_grade from mw_app.mwt_gradeinfo;
if(p_grade>p_stdgrade)then
select gra.stuname||gra.stuname into yxxskm from mw_app.mwt_gradeinfo gra;
elsif(p_grade=p_stdgrade)then
select gra.stuname||gra.stuname into yxxskm from mw_app.mwt_gradeinfo gra;
else
select gra.stuname||gra.stuname into ybxskm from mw_app.mwt_gradeinfo gra;
end if;
end;
调用的时候 传进来一个成绩标准,如果成绩大于这个标准做一种处理,小于该标准做一种处理,再把结果返回