oracle的存储过程语法(转)
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的存储过程语法(转)的更多相关文章
- Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 ...
- [转]Oracle 存储过程语法
转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html 存储过程 1 CREATE OR REPLACE PROCEDURE ...
- Oracle创建存储过程、执行存储过程基本语法
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- Oracle基础 存储过程
一.子程序 子程序是已命名的PL/SQL块,它们存储在数据库中,可以Wie它们指定参数,可以从任何数据库客户端和应用程序中调用它们.子程序包括存储过程和函数. 子程序包括: 1.声明部分:声明部分包括 ...
- oracle中存储过程详解
oracle中存储过程的使用 过程是指用于执行特定操作的PL/SQL块.如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程.通过使用过程,不仅可以简化客户应用的开发和维护,而且可以提高 ...
- 懵懂oracle之存储过程
作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存 ...
- SQLSERVER存储过程语法详解
CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...
- Oracle常用语句语法汇总
第一篇 基本操作 --解锁用户 alter user 用户 account unlock; --锁定用户 alter user 用户 account lock; alter user sco ...
随机推荐
- Linux系统ifconfig命令找不到,centos ifconfig Command not found
centos ifconfig Command not found,Linux系统ifconfig命令找不到 >>>>>>>>>>>& ...
- 20、CSS
CSS 层叠样式表(Cascading Style Sheets). 用于定义显示HTML样式. DIV和SPAN div是块级元素. span是行级元素. 将一些页面中的内容包裹起来统一设置样式. ...
- Java SE (3) 之 事件监听
package com.sun; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo ...
- [上传下载] C# UpLoadFiles文件上传类 (转载)
点击下载 UpLoadFiles.zip 主要功能如下 /// <summary> /// 上传文件 /// </summary> /// <param name=&qu ...
- while循环的跳出
今天在编码时突然产生一个疑问:程序中有一个while循环,循环体执行的是某个附带条件限制的操作.我现在想达到的目的是 => 条件成立,就执行操作,并跳出循环:条件不成立就跳出当次的while循环 ...
- EL标签和JSTL标签---JSP页面的应用
====EL(Expression Language)表达式语言:用于计算和输出存储在标志位置(page.request.session.application)的java对象的值: 1.开启和关闭E ...
- 读懂IL代码(三)
由于要写毕业论文的缘故,最近比较没有时间写,总是要抽出时间抽出时间.诶,这样的生活比较烦躁. 这一篇主要写委托.类.方法的IL代码,一一来说明. 委托:搞过C#的都应该清楚,委托实际上是一个类.编译器 ...
- Java stackoverflow error
本文想记录一下尝试产生stackoverflow的程序 1 -Xss=1k, 设置stack大小1024个字节,产生515个long,想把stack撑爆. 2 嵌套调用 3 创建大量线程 1 -Xss ...
- mahout分类
分类看起来比聚类和推荐麻烦多了 分类算法与聚类和推荐算法的不同:必须是有明确结果的,必须是有监督的,主要用于预测和检测 Mahout的优势 mahout的分类算法对资源的要求不会快于训练数据和测试数据 ...
- Java之字符串学习
java中String的使用十分频繁,是我们要学习的重点,在说String之前,我们要知道堆跟栈的区别. java中的数据类型分原生数据类型(primitived types)有八种(byte,cha ...