急求!怎么建立oracle存储过程(实例)

Posted

tags:

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

create PROCEDURE st_receipt
@sheetid char(16)
AS
BEGIN
insert into receipt select * from receipt0 wheresheetid=@sheetid --将 receipt0表中数据插入 receipt
update receipt set Flag=100 wheresheetid=@sheetid --更新receipt表中Flag值

insert into ReceiptItem select * from ReceiptItem0 where sheetid=@sheetid

delete from ReceiptItem0 where sheetid=@sheetid --删除ReceiptItem0表数据
delete from receipt0 where sheetid=@sheetid --删除 receipt0表数据
end

exec st_receipt @sheetid='ys141128'

这个是sql里的一个存储过程,放到oracle里该怎么写?在线等,急求!

--创建存储过程  IN_SHEETID 为输入参数
CREATE OR REPLACE PROCEDURE ST_RECEIPT(IN_SHEETID VARCHAR2) IS
BEGIN
  --将 receipt0表中数据插入 receipt
  INSERT INTO RECEIPT
    SELECT * FROM RECEIPT0 WHERE SHEETID = IN_SHEETID;
  --更新receipt表中Flag值
  UPDATE RECEIPT SET FLAG = 100 WHERE SHEETID = IN_SHEETID;
  --
  INSERT INTO RECEIPTITEM
    SELECT * FROM RECEIPTITEM0 WHERE SHEETID = IN_SHEETID;
  --删除ReceiptItem0表数据
  DELETE FROM RECEIPTITEM0 WHERE SHEETID = IN_SHEETID;
  --删除 receipt0表数据
  DELETE FROM RECEIPT0 WHERE SHEETID = IN_SHEETID;
END;

--调用存储过程
BEGIN
  ST_RECEIPT('ys141128');
END;
--或者
EXEC ST_RECEIPT('ys141128');

参考技术A create or replace PROCEDURE st_receipt(p_sheetid varchar2(16))
AS
BEGIN
insert into receipt select * from receipt0 where sheetid=p_sheetid ; --将 receipt0表中数据插入 receipt
update receipt set Flag=100 wheresheetid=p_sheetid; --更新receipt表中Flag值

insert into ReceiptItem select * from ReceiptItem0 where sheetid=p_sheetid ;

delete from ReceiptItem0 where sheetid=p_sheetid ;--删除ReceiptItem0表数据
delete from receipt0 where sheetid=p_sheetid ; --删除 receipt0表数据
end ;

exec st_receipt('ys141128')

oracle 存储过程

create or replace procedure GetRecords(num2 in number) as
--变量声明
maxlimit number;--记录当前最大拿到的码数量
shenyu number;--当前有多少个码
apptype number;--记录操作类型
begin
if num2=0-- 判断是否是指定数量,如果是0既为不指定数量,需要查询要获取多少凭证码
begin
select max_limit into maxlimit from t_code_limit;
select count(t.id) into shenyu from t_code_pool t where t.code_status=0;
num2=maxlimit-shenyu;
apptype=0;--设置类型为自动
end
else
begin
apptype=1;--设置类型为手动
end
Insert into t_code_pool(id,epass_code,subsidiary_code,code_status,apply_time)
select seq_test.nextval,t.cp_img,t.cp_number,t.cp_status,sysdate from
epassbase.t_base_code_pool t where t.cp_status=0 and rownum<num2 order by t.cp_createtime;--查询epss基础平台表,并直接插入到epss平台

update epassbase.t_base_code_pool set cp_status=1 where epassbase.t_base_code_pool.cp_id in(
select t.cp_id from epassbase.t_base_code_pool t where rownum<num2 order by t.cp_createtime;)--将上一步拿过得数据进行修改状态

insert into t_code_apply_log values(seq_test.nextval,sysdate,num2,apptype);--添加epass拿码记录

insert into epassbase.t_apply_record values(1,1,num2,sysdate);--添加基础平台拿码记录

end;
帮忙看一下那里错误,解决者追加积分
....

参考技术A 说的是 oracle 存储过程 用的是 SQL server 的语法! 参考技术B 可以用单步调试看一下出错的地方,这样看代码很难定位问题! 参考技术C 你这些复制语句不用加冒号么? a:=b;修改一下试试,如果还报错,把报错提示贴出来。追问

那些都改过了
update epassbase.t_base_code_pool set cp_status=1 where cp_id in
(select cp_id from epassbase.t_base_code_pool where rownum<num1 order by cp_createtime);
这两句提示上面的是有可能被忽略,下面的是缺少右括号,让我很是纠结啊= =

追答

我测试了一下你这种语句
update sc_ord_order set create_by='11111' where id in (select id from sc_ord_order where rownum <2 );
应该是没有问题啊。要不你把现在的源码贴出来我看看。

追问

大哥= =有木有个联系方式,qq啥的= =我加你- -这上面发那个源码不够了- -现在最多发两百个- -

追答

84921124 qq

本回答被提问者采纳

以上是关于急求!怎么建立oracle存储过程(实例)的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库job怎么调用含参数的存储过程?

oracle中的存储过程怎么写

oracle的存储过程

oracle的存储过程怎么写?

oracle怎么写存储过程

oracle pl/sql 存储过程