1、ORA-00942: table or view does not exist 指的你要操作的表尚未存在,需要先create出来先。

2、ORA-00922: missing or invalid option 指的是有语法错误。遗漏了分号什么的

3、Warning: Procedure created with compilation errors

比如  create or replace procedure p_test_pro1 is     begin       insert into loginuser(username,passwd) values('admin','123');     end                -------这里遗漏了分号     /   Warning: Procedure created with compilation errors   SQL> show error  --显示出具体的错误所在 Errors for PROCEDURE SCOTT.P_TEST_PRO1:   LINE/COL ERROR -------- ---------------------------------------------------------------------------------------------------- 6/0      PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:       ; <an identifier> <a double-quoted delimited-identifier>     delete exists prior <a single-quoted SQL string>  The symbol ";" was substituted for "end-of-file" to continue.

4、ORA-06576: not a valid function or procedure name     存储过程p_test_pro1尚未创建

call p_test_pro1    ORA-06576: not a valid function or procedure name

5、ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at "SCOTT.P_TEST_PRO1", line 6 ORA-06512: at line 2

create or replace procedure p_test_pro1 IS                v_pass varchar2(20);            begin                select passwd into v_pass from loginuser where rownum=1;                dbms_output.put_line('密码是:'+v_pass);             end;

当调用p_test_pro1的时候报以上错误,把输出语句中的+改为||

在谈存储过程书写中的一些规则时,先看一下执行它的规则,在命令窗口执行存储过程sp_get_product_prompt       set serveroutput on      var ret1 varchar2(200);      var ret2 varchar2(200);      exec sp_get_product_prompt(83,:ret1,:ret2); --或execute      print ret1;      print ret2;            set serveroutput on      declare         ret1 varchar2(200);         ret2 varchar2(200);      begin         sp_get_product_prompt(83,ret1,ret2);         dbms_output.put_line(ret1);         dbms_output.put_line(ret2);      end;

存储过程入参,不论类型,缺省情况下值都为null,入参和出参不能有长度,其中关键字as可以替换成is,存储过程中变量声明在as和begin之间,同时,存储过程中可以再调用其它的存储过程,如果要保证存储过程之间的事务处理不受影响,可以定义为自治事务。      create or replace procedure say_hello(        v_name in varchar2,        v_flag number,        o_ret out number      )      as      begin        if v_name is null and v_flag is null then --v_name和v_flag都等于null            o_ret := 10;        else            o_ret := 100;         end if;      end;

对于入参为null情况下给予缺省值      create or replace procedure say_hello(        i_name in varchar2,        i_flag number,        o_ret out number      )      as        v_name  varchar2(100);      begin        if i_name is null then            v_name := '0';        else           v_name := i_name;        end if;        insert into phone(..,wname..,) values(..,v_name,..);              end; 或直接在insert语句中调用nvl函数赋缺省值      insert into phone(..,wname..,) values(..,nvl(v_name,' '),..); ----如果将' '写成'',则insert进来的v_name值还是为''等价于null值

带一个参数的存储过程    输入参数in,输入参数不能进行:=赋值,但可以将它赋给as后面定义的变量;    输入参数in,可以作为变量进行条件判断;    默认不写就是in;    存储过程没有重载,这个有参的say_hello会替代已经存在的无参say_hello。

create or replace procedure say_hello(v_name in varchar2)      as      begin         --v_name:='a'; --存储过程入参v_name不能做为赋值目标         dbms_output.put_line('hello '||v_name);       end;

存储过程输入参数作为变量进行条件判断      create or replace procedure say_hello(         i_opFlag in number      )      as         v_name varchar2(100);      begin         if i_opFlag = 1 then     v_name :='0';          else     v_name :='haha';         end if;          dbms_output.put_line('hello '||v_name);       end;

利用存储过程中定义的变量对入参的空值处理:      create or replace procedure say_hello(         i_name in varchar2      )      as         v_name varchar2(100);      begin         if i_name is null then     v_name :='0';          else     v_name :=i_name;--将入赋值给定义变量         end if;          dbms_output.put_line('hello '||v_name);       end;

多个参数的存储过程      create or replace procedure say_hello(         v_first_name in varchar2,         v_last_name in varchar2)      as      begin         dbms_output.put_line('hello '||v_first_name||'.'||v_last_name);      end;

out输出参数,用于利用存储过程给一个或多个变量赋值,类似于返回值      create or replace procedure say_hello(         v_name in varchar2,         v_content out varchar2      )      begin         v_content:='hello'||v_name;      end;

调用:      declare         v_con varchar2(200);         v_in varchar2(20):='wang';      begin         say_hello(v_in,v_con);         dbms_output.put_line(v_con);      end;

in out参数,既赋值又取值      create or replace procedure say_hello(v_name in out varchar2)      as      begin         v_name:='hi '||v_name;      end;

调用:      declare         v_inout varchar2(20):='wangsu';      begin         say_hello(v_inout);         dbms_output.put_line(v_inout);      end;

对存储过程入参赋缺省值      create or replace procedure say_hello(         v_name varchar2 default 'susu',         v_content varchar2 default 'hello'      )      as      begin         dbms_output.put_line(v_name||' '||v_content);      end;

调用:(用指明形参名的方式调用更好)      begin         say_hello();      end;      或      begin         say_hello('cheng');      end;      或      begin      say_hello(v_name=>'cheng');     end;

http://regedit-123.iteye.com/blog/1075151

oracle的存储过程语法(转)的更多相关文章

  1. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  2. [转]Oracle 存储过程语法

    转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html 存储过程 1  CREATE OR REPLACE PROCEDURE ...

  3. Oracle创建存储过程、执行存储过程基本语法

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  4. PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)

    (转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...

  5. Oracle基础 存储过程

    一.子程序 子程序是已命名的PL/SQL块,它们存储在数据库中,可以Wie它们指定参数,可以从任何数据库客户端和应用程序中调用它们.子程序包括存储过程和函数. 子程序包括: 1.声明部分:声明部分包括 ...

  6. oracle中存储过程详解

    oracle中存储过程的使用 过程是指用于执行特定操作的PL/SQL块.如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程.通过使用过程,不仅可以简化客户应用的开发和维护,而且可以提高 ...

  7. 懵懂oracle之存储过程

    作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存 ...

  8. SQLSERVER存储过程语法详解

    CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...

  9. Oracle常用语句语法汇总

    第一篇  基本操作 --解锁用户   alter user 用户 account unlock; --锁定用户   alter user 用户 account lock; alter user sco ...

随机推荐

  1. hdu2039java

    三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  2. [转]cookie、session、sessionid 与jsessionid

    cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解. 我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种 ...

  3. Managing Group Policy with PowerShell

    Overview In this article, I’ll talk about your options when it comes to managing Group Policy using ...

  4. Java线性表的排序

    Java线性表的排序 ——@梁WP 前言:刚才在弄JDBC的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈 ...

  5. Spring读书笔记-----Spring的Bean之设置Bean值

    [java] view plaincopyprint? Java实例的属性值可以有很多种数据类型.基本类型值.字符串类型.java实例甚至其他的Bean实例.java集合.数组等.所以Spring允许 ...

  6. SQL小细节

    平时有些小细节,不留意的话很容易得到错误的答案,我们来看下下面的代码,看看你是否能答对呢? ) ,) SELECT @str = '中国CH',@info='MyTest' SELECT [字符串]= ...

  7. C#调用ActiveX控件

    背景:最近项目中需要用到ActiveX控件,项目是在.Net平台下开发的.因此就直接在项目中添加了对ActiveX控件的引用,添加引用成功.在代码中实例化类的实例也没有问题,但在调用其方法或属性时总是 ...

  8. Oracle学习第二天

    oracle数据库的常见数据类型oracle全部数据类型 有26种 char定长字符串类型 长度是固定不变的 例如:no char(10) 如果存入的值不足十个字符,其它位也被占用默认长度是1 最大长 ...

  9. 转载 VC 2010下安装OpenCV2.4.4

    说明: 1.安装平台:32位XP,VS2010: 2.OpenCV 2.4.4不支持VC 6.0: 3.网上有很多用CMake编译OpenCV的安装教程,这里建议先不要自己编译,如果使用预编译好的库有 ...

  10. gpfdist工具的初级使用

    gpfdist工具的使用主要两步: 第一步:打开gpfdist服务: gpfdist -d /home/admin -p -l /tmp/gpfdist.log & 参数解释: -d 数据文件 ...