问一个关于Oracle的存储过程invalid出现invalid的问题

17:27 提问
关于oracle存储过程的问题
我现在存储过程中需要通过循环来计算出很多行的数据,
每一行有四列,
每列的值都是计算出来存在一个变量里面的,
我想在每次循环的最后把这四列并成一行然后插入一个容器中,
直到循环结束,我把这个容器里的数据一起返回,
请问各位大神,我这里应该用什么来装每一行的数据,需要怎么装?
按赞数排序
可以用Object来放入数据。create or replace type t_name as object(a 类型,b 类型,c 类型,d 类型);
这是一个类型,需要声明一个该类型的变量。
然后可以 放入到这个变量里面。
在存储过程中,执行execute immediate 时,有时会报没有权限的错误, 这个时候要进行赋权处理如:grant create all table to username 赋权后就可以了......答案就在这里:----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。
其他相似问题记录一下oracle存储过程中出现异常并继续执行的问题
记录一下oracle存储过程中出现异常并继续执行的问题
使用语句:
execute immediate 'create index test ...;
when others then
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'Oracle存储过程中异常处理应注意的问题_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Oracle存储过程中异常处理应注意的问题
来源:Linux社区&
作者:qsfujinke
如果主存储过程和主函数又由子过程或子函数构成,在子函数或子程序中能否包含异常处理
要依据以下原则:
第一、如果主程序和子程序要作为一个事务来处理,则在子程序中不能触发异常,异常要到主调程序中取处理,如果在子程序中进行异常处理,如果子程序出现异常,进行异常处理后,还会继续执行主调程序中调用的出现异常的子程序的下面的代码,这样又开始了新的事务,这样破坏了事务的一致性,从而破坏了数据的一致性
&&&& 主调程序如下:
&&& procedure sp_procedure
&&&&& is&&&&& vs_pay_year_month varchar2(6);&&&&& vs_sql& varchar2(10000);
&&&&& begin&&&&&&&& sp_procedure1;
&&&&&&&& sp_procedure2;
&&&&&&&& update emp set& empname='张三'& where empid='00001'
&& exception&&&&& WHEN OTHERS THEN&&&&& --发生异常,把禁止的触发器设为有效&&&&&&&&&&& vs_sql:='alter table sal_t_mainper enable all triggers';&&&&& execute immediate vs_&&&&&
&& 子程序:
&&& procedure sp_procedure1
&&&&&& update department set dept_name='人事部'& where deptid='0001'
&&&&&& delete& from department where deptid='0002'
&& exception
&&&&& WHEN OTHERS THEN&&&&& --发生异常,把禁止的触发器设为有效&&&&& raise_application_error(-20001, '删除发生错误!');
所以,在子程序中不允许处理异常,这样就会破坏数据的一致性
&第二、如果主程序和子程序不作为一个事务来处理,则在子程序中可以触发异常,但这种情况很少。
相关资讯 & & &
& (11/10/:58)
& (08/22/:00)
& (06/18/:32)
& (10/22/:50)
& (07/18/:00)
& (02/16/:35)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款查看: 3519|回复: 3
如果一个存储过程的状态是invalid,是什么意思呢?
论坛徽章:0
存储过程是怎么回事情?
认证徽章论坛徽章:4
这说明该存储过程是失效的,建议重新编译一下!
论坛徽章:4
alter procedure pro_
论坛徽章:0
用TOAD&&compile搞定
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号查看: 558|回复: 12
新手求助大神,一个sql存储过程问题
论坛徽章:0
写pl/sql存储过程的时候,用了insert总给我报错这个,网上有人说要写commit,也不行好吧,上传图片上传不了& &
PROCEDURE TEST.TESTTT 编译错误
错误:PLS-00103: 出现符号 &INSERT&在需要下列之一时:
& && &&&then and or
& && & 符号 &then& 被替换为 &INSERT& 后继续。
文本:insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
错误:PLS-00103: 出现符号 &INSERT&在需要下列之一时:
& && &&&then and or
& && & 符号 &then& 被替换为 &INSERT& 后继续。
文本:insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
错误:PLS-00103: 出现符号 &INSERT&在需要下列之一时:
& && &&&then and or
& && & 符号 &then& 被替换为 &INSERT& 后继续。
文本:insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
错误:PLS-00103: 出现符号 &INSERT&在需要下列之一时:
& && &&&then and or
& && & 符号 &then& 被替换为 &INSERT& 后继续。
文本:insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
错误:PLS-00103: 出现符号 &INSERT&在需要下列之一时:
& && &&&then and or
& && & 符号 &then& 被替换为 &INSERT& 后继续。
文本:INSERT INTO gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
错误:PLS-00103: 出现符号 &;&在需要下列之一时:
& && &&&if
文本:END;
新手刚接触pl/sql,各位求指点
论坛徽章:0
create or replace procedure testtt(sttime in varchar2,endtime in varchar2,jgddm in varchar2,zbbmin varchar2)
cursor c is select zbbm from CEN_ETL_V20.TB_DIC_GZBH;
cursor d is select jgdm from CEN_ETL_V20.TB_DQ_RGFX_YWSJ& & union
& && && && && && && &select jgdm from CEN_ETL_V20.TB_DQ_RJSX_YWSJ union
& && && && && && &&&select jgdm from CEN_ETL_V20.TB_DQ_RWZX_YWSJ union
& && && && && && && &select jgdm from CEN_ETL_V20.TB_DQ_RYZX_YWSJ;
&&for ttime in to_date(sttime,'yyyymmdd')..to_date(endtime,'yyyymmdd') loop
case when&&(jgdm is not null and zbbmin is not null)
& &&&begin
& && & if not exists(
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=ttime
& && &&&union all
& && &&&select&&YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RJSX_YWSJ&&where jgdm=jgddm and gzbh=zbbmin AND YWRQ=ttime
& && &&&UNION ALL
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RWZX_YWSJ&&where jgdm=jgddm and gzbh=zbbmin AND YWRQ=ttime
& && &&&UNION ALL
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RYZX_YWSJ&&where jgdm=jgddm and gzbh=zbbmin AND YWRQ=ttime
& && &&&insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && &&&select TTIME,JGDDM,ZBBMIN,1,NULL,NULL FROM DUAL;
& && &&&ELSE
& && && &&&if&&exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=ttime)
& && && && & insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && & select&&TTIME,JGDDM,ZBBMIN,0,jyjlsh-fhgzsh,null from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=
& && && &&&else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RJSX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=ttime)
& && && &&&insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && &&&select&&TTIME,JGDDM,ZBBMIN,0,null,zhrqsh from CEN_ETL_V20.TB_DQ_RJSX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=
& && && && &else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RWZX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=ttime)
& && && && && &insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && & select&&TTIME,JGDDM,ZBBMIN,0,jyjlsh-fhgzsh,null from CEN_ETL_V20.TB_DQ_RWZX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=
& && && && && &else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RYZX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=ttime)
& && && && && &&&INSERT INTO gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && && &&&SELECT&&TTIME,JGDDM,ZBBMIN,0,NULL,FUNVAL1-FUNVAL2 FROM CEN_ETL_V20.TB_DQ_RYZX_YWSJ where jgdm=jgddm and gzbh=zbbmin AND YWRQ=
& && &&&END IF;
& && &&&END;
& && &&&WHEN(jgdm is not null and zbbmin is&&null)
& && &&&THEN
& && && &&&begin
& && && && & for zb in c loop
& && & if not exists(
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=ttime
& && &&&union all
& && &&&select&&YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RJSX_YWSJ&&where jgdm=jgddm and gzbh=zb AND YWRQ=ttime
& && &&&UNION ALL
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RWZX_YWSJ&&where jgdm=jgddm and gzbh=zb AND YWRQ=ttime
& && &&&UNION ALL
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RYZX_YWSJ&&where jgdm=jgddm and gzbh=zb AND YWRQ=ttime)
& && && && && & insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && &&&select TTIME,JGDDM,ZB,1,NULL,NULL FROM DUAL;
& && &&&ELSE
& && && &&&if&&exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=ttime)
& && && && & insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && & select&&TTIME,JGDDM,ZB,0,jyjlsh-fhgzsh,null from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=
& && && &&&else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RJSX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=ttime)
& && && &&&insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && &&&select&&TTIME,JGDDM,ZB,0,null,zhrqsh from CEN_ETL_V20.TB_DQ_RJSX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=
& && && && &else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RWZX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=ttime)
& && && && && &insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && & select&&TTIME,JGDDM,ZB,0,jyjlsh-fhgzsh,null from CEN_ETL_V20.TB_DQ_RWZX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=
& && && && && &else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RYZX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=ttime)
& && && && && &&&INSERT INTO gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && && &&&SELECT&&TTIME,JGDDM,ZB,0,NULL,FUNVAL1-FUNVAL2 FROM CEN_ETL_V20.TB_DQ_RYZX_YWSJ where jgdm=jgddm and gzbh=zb AND YWRQ=
& && &&&END IF;
& && &&&END;
& && && & when(jgdm is&&null and zbbmin is not null)
& && && & THEN
& && && &&&begin
& && && && & for yljg in d loop
& && & if not exists(
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=ttime
& && &&&union all
& && &&&select&&YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RJSX_YWSJ&&where jgdm=yljg and gzbh=zbbmin AND YWRQ=ttime
& && &&&UNION ALL
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RWZX_YWSJ&&where jgdm=yljg and gzbh=zbbmin AND YWRQ=ttime
& && &&&UNION ALL
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RYZX_YWSJ&&where jgdm=yljg and gzbh=zbbmin AND YWRQ=ttime)
& && && && && & insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && &&&select TTIME,yljg,ZBBMIN,1,NULL,NULL FROM DUAL;
& && &&&ELSE
& && && &&&if&&exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=ttime)
& && && && & insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && & select&&TTIME,yljg,ZBBMIN,0,jyjlsh-fhgzsh,null from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=
& && && &&&else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RJSX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=ttime)
& && && &&&insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && &&&select&&TTIME,YLJG,ZBBMIN,0,null,zhrqsh from CEN_ETL_V20.TB_DQ_RJSX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=
& && && && &else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RWZX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=ttime)
& && && && && &insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && & select&&TTIME,YLJG,ZBBMIN,0,jyjlsh-fhgzsh,null from CEN_ETL_V20.TB_DQ_RWZX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=
& && && && && &else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RYZX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=ttime)
& && && && && &&&INSERT INTO gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && && &&&SELECT&&TTIME,YLJG,ZBBMIN,0,NULL,FUNVAL1-FUNVAL2 FROM CEN_ETL_V20.TB_DQ_RYZX_YWSJ where jgdm=yljg and gzbh=zbbmin AND YWRQ=
& && &&&END IF;
& && &&&END;
& && &&&when (jgdm is&&null and zbbmin is null)
& && && &&&THEN
& && && &&&begin
& && && && &&&for yljgg in d loop
& && && && && & for zbbb in c loop
& && & if not exists(
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=ttime
& && &&&union all
& && &&&select&&YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RJSX_YWSJ&&where jgdm=yljgg and gzbh=zbbb AND YWRQ=ttime
& && &&&UNION ALL
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RWZX_YWSJ&&where jgdm=yljgg and gzbh=zbbb AND YWRQ=ttime
& && &&&UNION ALL
& && &&&select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RYZX_YWSJ&&where jgdm=yljgg and gzbh=zbbb AND YWRQ=ttime)
& && && && && & insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && &&&select TTIME,yljgg,zbbb,1,NULL,NULL FROM DUAL;
& && &&&ELSE
& && && &&&if&&exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=ttime)
& && && && & insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && & select&&TTIME,yljgg,ZBBB,0,jyjlsh-fhgzsh,null from CEN_ETL_V20.TB_DQ_RGFX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=
& && && &&&else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RJSX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=ttime)
& && && &&&insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && &&&select&&TTIME,YLJGG,ZBBB,0,null,zhrqsh from CEN_ETL_V20.TB_DQ_RJSX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=
& && && && &else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RWZX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=ttime)
& && && && && &insert into gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && & select&&TTIME,YLJGG,ZBBB,0,jyjlsh-fhgzsh,null from CEN_ETL_V20.TB_DQ_RWZX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=
& && && && && &else if exists(select YWRQ,JGDM,GZBH from CEN_ETL_V20.TB_DQ_RYZX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=ttime)
& && && && && &&&INSERT INTO gftj(RQ,YLJGDM,ZBMC,ISLACK,TOTALT,TOTALD)
& && && && && &&&SELECT&&TTIME,YLJGG,ZBBB,0,NULL,FUNVAL1-FUNVAL2 FROM CEN_ETL_V20.TB_DQ_RYZX_YWSJ where jgdm=yljgg and gzbh=zbbb AND YWRQ=
& && &&&END IF;
& && &&&END;
& && &&&END;
& && &&&END LOOP;
& && &&&CLOSE
& && &&&CLOSE
& && &&&END;
这是代码,就是简单的插入,总报错
论坛徽章:120
简单的看了一下,& &if not exists这种oracle是非常语法, 估计你是从sql server转过来的吧, 你还是别急, 看看oracle的相关语法资料
论坛徽章:380
问题太大了
论坛徽章:0
简单的看了一下,& &if not exists这种oracle是非常语法, 估计你是从sql server转过来的吧, 你还是别急, ...
能推荐一些好的资料么,市面上的书写的都是简单的语法,没这些深入的,比如存储过程就简单的六七页就过去了,不明不白啊
论坛徽章:0
问题太大了
我知道,,,我把exists后面的then加上去了,问题小了点,现在只有一个错误,在end上的,
论坛徽章:0
问题太大了
大大,在oracle上有类似exists的方法使用么,感觉遇到瓶颈了
认证徽章论坛徽章:169
你这语法全靠报错解决。。。
认证徽章论坛徽章:189
if not exists
select count(*) into dwcount from mytable where ...
if dwcount = 0 then
认证徽章论坛徽章:6
你这错误太多了,用客户端工具,看下报错地方改正吧.
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号

我要回帖

更多关于 oracle 执行存储过程 的文章

 

随机推荐