求两个oracle存储过程例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求两个oracle存储过程例子相关的知识,希望对你有一定的参考价值。

初学oracle,学的很浅。不太能理解oracle的存储过程。请高手帮忙写一个用存储过程建表的例子。 表名USERS,字段 user_id,username,password。表里添加两个用户AA和BB,密码都是123就行。请大神帮忙注释一下写的存储过程每步是做什么用的。然后再用创建好的这个表,还是用存储过程写一个查询以及添加用户CC,密码为123。谢谢谢谢!有一些自己理解起来比较别扭。

参考技术A create or replace procedure proc_create is (固定语法定义存储过程名称)
begin
create table user_info (

userid number(5) primary key,

username varchar2(20),

password varchar2(20)

);--(建表完成,这个就不用解释了吧)

insert into user_info values('AA','123');
insert into user_info values('BB','123');
end proc_create;--(创建表的存储过程完成,注意格式即可,begin下面写正常的sql语句就ok了)

后面的那个你理解之后,自己先试试能不能写出来再说 尽量自己解决了撒。
另外还可以创建带参数的存储过程,多查查资料
不明白再问哈
参考技术B 基本语法:
create or replace procedure p1 --存储过程名称
[(p_输入参数 in datatype数据类型,p_输出参数 out datatype数据类型)]
as
--v_变量名 datatype数据类型;也可声明程序中需要的变量
begin
--执行语句;增删改查
--[exception 异常处理]
end;
一般创建表不写存储过程:
create table USERS(
userid number(5) identity primary key,
username varchar2(20),
password varchar2(20)
);
insert into users values('AA','123');
insert into users values('bb','123');
查询的存储过程:输入用户名,查询密码
create or replace procedure p1
(
p_username in users.username%type,p_password out users.password%type
)as
begin
select password into p_password from users where username=p_username;
exception
when no_data_found then dbms_output.put_line('用户不存在');
end;
create or replace procedure p2
(
p_username in users.username%type,p_password in users.password%type
)as
begin
insert into users values(p_username,p_password);
end;

oracle带参数的存储过程,一直提示sql无效sql语句。求高手指点

create or replace procedure cpgd_insert
(
sj in varchar2;
)
as
declare sl number(10);
begin
select count(1) into sl from dba_views where view_name = 'jbftjl' and OWNER='WINE';
if sl=1 then
insert into dg_daybb (epname,gangzhong,ph,guige,rbcp,ybcp,riqi) select '纵剪机' as epname ,gangzhong,ph,guige, rbcp,ybcp,to_date(sj,'yyyy-mm-dd') as riqi from jbftjl;
end if;
end;

execute cpgd_insert ('2012-06-08');

参考技术A 对,确实是declare要删除,你的as已经代表要申明一个变量了
create or replace procedure cpgd_insert(sj in varchar2) as
sl number(10);
begin
select count(1)
into sl
from dba_views
where view_name = 'jbftjl'
and OWNER = 'WINE';
if sl = 1 then
insert into dg_daybb
(epname, gangzhong, ph, guige, rbcp, ybcp, riqi)
select '纵剪机' as epname,
gangzhong,
ph,
guige,
rbcp,
ybcp,
to_date(sj, 'yyyy-mm-dd') as riqi
from jbftjl;
end if;
end;
参考技术B begin
cpgd_insert ('2012-06-08');
end;

还有个问题,你insert后没提交,所以插入不到表里
insert into 后加一句
commit;

在oracle里,insert update delete后必须提交,否则插不进数据不说 ,还会造成锁表,请牢记追问

还是提示无效sql

追答

你是在执行create 过程中报错,还是在执行
begin
cpgd_insert ('2012-06-08');
end;

的时候报错?有截图没有?

追问

创建过程的时候没报错,执行的时候就

追答

你是用什么执行的?
sqlplus?pl/sql?还是其他?

追问

plqsl

追答

这样,你在左边列表找到procedures
点开,找到你的这个cpgd_insert
然后右键,点测试,下边有个输入参数的地方
你看看能跑成功不

或者在一个sql窗口执行我那句

百度hi里加你了,我给你调吧

本回答被提问者采纳
参考技术C declare 不需要追问

刚开始没加也一样

参考技术D 第一,你sj in varchar2 后面不应该有分号
第二,不应该有declare这个关键字

以上是关于求两个oracle存储过程例子的主要内容,如果未能解决你的问题,请参考以下文章

oracle 存储过程 执行、调用不成功 求高手指导?

oracle的存储过程怎么写?

myBatis 调用 Oracle 存储过程,报错,求解答

oracle 存储过程循环插入数据不定时出现卡死,求高手指点,循环过程如下:

oracle带参数的存储过程,一直提示sql无效sql语句。求高手指点

求oracle高手,存储过程中取游标值时,出现数据类型不一致问题,急急