oracle执行存储过程06576,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: ; delete exists prior 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;
oracle执行存储过程06576,oracle的存储过程语法相关推荐
- oracle 执行计划 ppt,oracle查看执行计划的方法
查看执行计划的方法 Explain Plan For SQL 不实际执行SQL语句,生成的计划未必是真实执行的计划 必须要有plan_table SQLPLUS AUTOTRACE 除set auto ...
- oracle 执行计划耗时,oracle各种执行计划优缺点
一. 获取oracle执行计划的方法有6种,各自的优缺点如下,根据实际情况进行选择使用: explain plan for 方式 步骤1:explain plan for 后跟着SQL语句 步骤2:s ...
- oracle执行存储过程06576,Oracle中执行存储过程call和exec区别
在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是exec是sqlplus命令,只能在sqlplus中 ...
- 利用oracle执行系统命令,利用oracle存储过程执行操作系统命令(转)
以下方法在WINNT,LINUX下的oracle9i上测试通过,java过程调用系统命令 首先给使用java存储过程的用户授予一定的权限 <>表示所有文件,也可以单独指定文件. r w e ...
- oracle+执行变量语句,ORACLE sql 语句的执行过程(SQL性能调整)
第1章 SQL语句处理的过程 在调整之前我们需要了解一些背景知识,只有知道这些背景知识,我们才能更好的去调整sql语句. 本节介绍了SQL语句处理的基本过程,主要包括: · 查询语句处理 · DML语 ...
- oracle执行sql痕迹,Oracle 查询刚执行的SQL
Oracle 查询刚刚执行的SQL select "SQL_TEXT", "SQL_FULLTEXT", "SQL_ID", "S ...
- 查oracle执行的sql,oracle查询正在执行的sql
--oracle查看锁表进程,杀掉锁表进程 --查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_ ...
- python oracle 执行commit_Python操纵oracle
前言 Python自带的模块中有很多操纵文件的.我们可以把文件的数据读出来,经过处理还可以将数据写入文件中.但是对于数据的管理和分析来说,数据库还是专业一些.如果Python能和数据库结合在一起,那么 ...
- oracle 执行脚本规则,oracle执行脚本命令总结
1. 执行一个SQL脚本文件 sqlplus user/pass@servicenamefile_name.sql 或 SQLstart file_names 或 SQL@ file_name 我们可 ...
最新文章
- python趣味编程:歌星大奖赛
- [并发编程]并发编程第二篇:利用并发编程,实现计算大量数据的和
- linux网卡team0,Linux双网卡绑定单个IP之(team)
- Linux MySQL5.5的安装
- 数据切分——Atlas读写分离Mysql集群的搭建
- 如何将 image 转成 base64 字符串?
- python中tkinter的使用-下
- 江西省普通高考2021艺术楼统考成绩查询,统考成绩查询
- 微服务架构实战(二):使用API Gateway
- logistic回归模型
- 虚拟机ip映射到外网
- 达梦数据库的表空间及用户管理
- nuxt.js项目打包上传服务器pm2启动各种问题
- 28部漫威电影按漫威时间全梳理
- 小米商城前端页面(静态)
- JDBC bug : You must configure either the server or JDBC driver
- Scikit-Learn机器学习(knn算法)
- 磁盘smart错误日志重点关注信息
- c语言如何将数组里的数排序输出,c程序输入10个数到一维数组中,按升序排序后输出。...
- Shell - mkdir